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
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
}
@Override
public Person[] newArray(int size) {
return new Person[size];
}
};
注意:1.CREATOR必须大写才行。
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型写出和读取.