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~