第十三篇:Android 序列化的两种方式

1.Intent.putExtra 表示给intent携带一些额外的参数,多用于传递参数。
 Intent.putExtras表示给intent携带intent或者bundle,多用于传递一批参数。


 注意:如果intent要传递对象,则要实现序列化。


序列化:表示将一个对象转换成可存储或可传输的状态。序列化后的对象可以在网络上进行传输,也可以存储到本
地。


序列化实现的两种方式:


1.实现Serializable,如Person,这样所有的person对象就都是可序列化的对象了。
2.实现Parcelable,可以指定对象中需要实现序列化的变量,未序列化的变量,获取为null.


如:让Person对象实现序列化,步骤如下,


1.需要重写describeContents()和writeToParcel(Parcel dest,int flags)这两个方法,其中describeContents()直接返回0即可,不用改,而writeToParcel()需要指定哪些变量需要被写出,被传输。


@Override
public void writeToParcel(Parcel dest,int flags){
dest.writeString(name);//写出name

dest.writeInt(age);//写出age

dest.writeByte((byte)isOlder?1:0);//写出boolean isOlder是否是老年人

dest.writeParcelable(parentObj,flags)//写出Person父亲对象;

}


2.还需要提供一个名为CREATOR的常量,并重写createFromParcel()和newArray()这两个方法,在newArray()中返回person的数组,大小为size,而在createFromParccel中去读取刚才写出的name 和age字段,并创建一个Person 对象进行返回,如:


public static final Parcelable.Creator<Person> CREATOR = new Parcelable.Creator<Person>(){


@Override
public Person createFromParcel(Parcel source) {
Person person = new Person();
person.name = source.readString(); // 读取name

person.age = source.readInt(); // 读取age

person.isOlder = source.readByte != 0;// if source.readByte !=0    isOlder为true,否则为false.

person.parentObj = (Person)source.readParcelable(Person.class.getClassLoader());//读取Person父亲对象

return person;
}


@Override
public Person[] newArray(int size) {
return new Person[size];
}
};


注意:1.CREATOR必须大写才行。

     2.读取变量的顺序要和写出的顺序一致,否则可能会导致类型转换错误或者传错值。

3.传递boolean变量,可以转成byte或int型写出和读取.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值