Parcelable对象序列化

 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());


猜你喜欢

转载自username2.iteye.com/blog/2188459