Parcelable,数据需要序列化推荐使用
1 这个接口供实体序列化使用,
2 在Intent中 传递数据和进程间通信都 可以使用此序列化
3 数据不能序列化到本地,速度比原生的Serializable快
Intent之间数据传递例子:
1 实体例子 (必须实现序列化和反序列化方法,并且两个方法中属性顺序要一样)
/**
* Parcelable
* 1 这个接口供实体序列化使用,
* 2 在Intent中 传递数据和进程间通信都 可以使用此序列化
* 3 数据不能序列化到本地,速度比原生的Serializable快
*
* @author root
*
*/
public class Person implements Parcelable {
private Integer id;
private String name;
@Override
public int describeContents() {
return 0;
}
/**
* 注意:
* 1 实现Parcelable.Creator接口,否则在获取Person数据的时候,会报错
* 2 实现Parcelable.Creator接口对象名必须为CREATOR,不如同样会报错
* 3 在读取Parcel容器里的数据,必须按writeToParcel中顺序读取, 不然会出现获取数据出错
* 4 名称:反序列化对象
*/
public static final Parcelable.Creator<Person> CREATOR = new Parcelable.Creator<Person>() {
//从序列化的对象中 ,将数据还原,读取顺序与 “writeToParcel”写入顺序一致
public Person createFromParcel(Parcel source) {
Person p1 = new Person();
p1.setId(source.readInt());
p1.setName(source.readString());
return p1 ;
}
public Person[] newArray(int size) {
return new Person[size];
}
};
/**
* 将对象打包(序列化)到提供的Parcel中
* 顺序要与CREATER中一样
* 名称:序列化对象
*/
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt( id );
dest.writeString(name );
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
2 Intent之间传递
第一个Activity中
Person p = new Person();
p.setId(1);
p.setName("xiaoming");
//传递序列化后的对象
intent.putExtra("Person", p);
第二个Activity中取出数据
Person person = intent.getParcelableExtra("Person");
System.out.println( person.getId()+" = "+person.getName());