Activity之间的数据传输
activity之间的数据传输我们可以通过Intent对象的putExtra方法,通过这个可以传输很多不同类型的数据,比如说字符串、整数、实数、对象等。
首先以一个字符串举例来说一下:
通过putExtra传输字符串可以通过如下方法:
putExtra(String name, String value):intent
第一个参数为用来让接收数据的activity辨别的字符串,相当于HashMap中的索引值。
第二个为要发送的数据(这里是字符串)。
在目标activity中通过这个name来找到这个value。
当前activity中:
String str = "你好"; intent.putExtra("data", str);
目标activity中:
Bundle bundle = getIntent().getExtras(); String str = bundle.getString("data");
上面只是简单的说明一下如何传输字符串。
那么如何传输对象呢?这货比较特殊,不能像putExtra("data", Object)这样进行传输,没有这种方法。
在重载方法中可以找到两个比较特殊的方法:
putExtra(String name, Serializable value):intent
putExtra(String name, Parcelable value):intent
Serializable和Parcelable分别是两个接口,那么要传输对象,则只需要使得类实现这两个接口之一就行了。
我们先来看一下Serializable实现,创建一个类Obj并且实现该接口:
import java.io.Serializable; public class Obj implements Serializable{ private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } }
当前activity:
Obj obj = new Obj(); obj.setName("李刚"); intent.putExtra("data", obj);
目标activity:
Bundle bundle = getIntent().getExtras(); Obj obj = (Obj) bundle.get("data"); String name = obj.getName();
再来看一下Parcelable实现,创建一个类Obj2并且实现该接口:
import android.os.Parcel; import android.os.Parcelable; public class Obj2 implements Parcelable{ private String name; private String age; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAge() { return age; } public void setAge(String age) { this.age = age; } @Override public int describeContents() { return 0; } /* * 创建CREATOR常量(必须要这样做) * */ public static Parcelable.Creator<Obj2> CREATOR = new Creator<Obj2>() { @Override public Obj2[] newArray(int size) { return null; } /* * 重写createFromParcel方法 * */ @Override public Obj2 createFromParcel(Parcel source) { //通过读取Parcel类对象的属性,来set当前类的属性 Obj2 obj2 = new Obj2(); obj2.setName(source.readString()); obj2.setAge(source.readString()); return obj2; } }; /*将对象属性保存到Parcel类对象中*/ @Override public void writeToParcel(Parcel dest, int flags) { dest.writeString(name); dest.writeString(age); } }
看起来是不是要比实现Serializable接口要复杂的多?但是这种方法要好多的,主要是该方法速度快,性能好(一般用这种)。
当前activity:
Obj2 obj2 = new Obj2(); obj2.setName("李刚"); obj2.setAge("38岁"); intent.putExtra("s1", obj2);
目标activity:
Bundle bundle = getIntent().getExtras(); Obj2 obj2 = (Obj2) bundle.get("s1"); String name = obj2.getName(); String age = obj2.getAge();
以上就是两种实现对象传输的方法。
THE END~