Android 进阶之使用Intent传递对象
——整理自《第一行代码》
方式一:Serializable
public class Person implements Serializable{
//创建实体类使之实现Serializable接口
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
Intent使用:
Person person = new Person("Tom",20);
Intent intent = new Intent();
intent.putExtra("person",person);//直接存入被序列化的对象实例
Person person = (Person) getIntent().getSerializableExtra("person");
//在要跳转的Activity中取出对象 注意向下转型!
方式二:Parcelable
public class Person implements Parcelable {
//创建实体类使之实现Parcelable接口
……
/**
* 重写describeContents()与writeToParcel()
*/
@Override
public int describeContents() {
return 0; //直接返回0
}
@Override
public void writeToParcel(Parcel parcel, int i) {
//将Person中的字段一一写出
parcel.writeString(name); //写出name
parcel.writeInt(age); //写出age
}
public static final Parcelable.Creator<Person> CREATOR = new Parcelable.Creator<Person>(){
//提供一个常量CREATOR指定泛型Person
/**
* 重写createFromParcel()与newArray()
*/
@Override
public Person createFromParcel(Parcel parcel) {
Person person = new Person();
person.name = parcel.readString();//读取name
person.age = parcel.readInt();//读取年龄
//注意顺序与写出顺序一致
return person;
}
@Override
public Person[] newArray(int i) {
return new Person[i];
}
};
}
Intent使用:
Person person = new Person("Tom",20);
Intent intent = new Intent();
intent.putExtra("person",person);//存
Person person = (Person) getIntent().getParcelabelExtra("person");
//在要跳转的Activity中取出对象 注意向下转型!
对比:Serializable方式较为简单,但由于是对整个对象进行序列化,效率会比Parcelable方式低,通常情况下建议使用Parcelable方式实现Intent传递对象。