读书人

Parcelable 新的序列化步骤

发布时间: 2012-12-18 12:43:41 作者: rapoo

Parcelable 新的序列化方法

原来一直以为intent中无法实现除基本数据的传递,其实intent中也可以传递继承Parcelable接口的类

?

?

Parcelable 是android 的一个新的序列化方式

? 1、新的序列化方式:

???? android提供了一种新的类型:Parcel。本类被用作封装数据的容器,封装后的数据可以通过Intent或IPC传递。

???? 除了基本类型以外,只有实现了Parcelable接口的类才能被放入Parcel中。

Parcelable实现要点:需要实现三个东西

1)writeToParcel 方法。该方法将类的数据写入外部提供的Parcel中.声明如下:

writeToParcel (Parcel dest, int flags) 具体参数含义见javadoc

2)describeContents方法。没搞懂有什么用,反正直接返回0也可以

3)静态的Parcelable.Creator接口,本接口有两个方法:

createFromParcel(Parcel in) 实现从in中创建出类的实例的功能

newArray(int size) 创建一个类型为T,长度为size的数组,仅一句话(return new T[size])即可。估计本方法是供外部类反序列化本类数组使用。

示例:

??? 需求:我们经常需要在多个部件(activity或service)之间通过Intent传递一些数据,简单类型(如数字、字符串)的可以直接放入Intent。复杂类型(例如,J2ee中的Bean)的必须实现Parcelable接口。示例如下:

class SampleBean implements Parcelable

{

??? private Bundle mBundle=new Bundle();?
??? public String getArriveTime()?
??? {????????
??????? return mBundle.getString("arriveTime");?
??? }

??? public String getOlTime()?
??? {?
??????? return mBundle.getString("olTime");?
??? }

??? public void setArriveTime(String arriveTime)?
??? {?
??????? this.mBundle.putString("arriveTime", arriveTime);?
??? }

??? public void setOlTime(String olTime)?
??? {?
??????? this.mBundle.putString("olTime", olTime);?
??? }

public int describeContents()?
??? {?
??????? // TODO Auto-generated method stub?
??????? return 0;?
??? }

public void writeToParcel(Parcel out, int arg1)?
??? {?
??????? // TODO Auto-generated method stub?
??????? out.writeBundle(this.mBundle);?
??? }

??? public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {?
??????? public TrainInfo createFromParcel(Parcel in)?
??????? {?
??????????? SampleBean ti=new SampleBean();?
??????????? ti.mBundle=in.readBundle();?
??????????? return ti;?
??????? }

??????? public SampleBean[] newArray(int size)?
??????? {?
??????????? return new SampleBean[size];?
??????? }?
??? };

}

读书人网 >编程

热点推荐