您的位置:首页 > 移动开发 > Android开发

Android Parceable传递复杂类型数据

2014-03-27 15:37 405 查看
Android Parcelable传递复杂类型数据
 

[align=left]          有些时候需要在activity之间或通过handler message 传递复杂数据类型得出数据,这时候往往会比较麻烦,通过实现Parcelable接口将复杂数据封装起来,

[/align]
           一、利用工具类,即新建类实现Parcelable接口

              主要实现三个方法:

              1、describeContents()   直接返回0 就可以了

              2、writeToParcel(Parcel dest, int flags)    将外部数据写入到Parcel中(封装起来)但是要注意在其他地方读取数据的顺序应该与这儿写入的顺序一致,否则会数据混乱。

              3、静态的Parcelable.Creator<>  CREATOR 接口 注意必须是 CREATOR  前边修饰关键字只能是 public static (可以有 final),这个接口是用来反序列化的,其中有两个方法,第二个比较简单直接返回相应类型的数组就可以了,大小就是参数 size , 第一个就是讲Parcel中的数据重新写入到相应的对象中,注意写的顺序。详情见以下代码:

@Override
public int describeContents() {
return 0;
}

/*
* 对象序列化在这里实现,
* 对每一个属性进行封装,写到流中
* 注意:在其他地方读或者设置值的时候,要跟这里写的顺序保持一致,否则读到的值可能为null
* */
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(user.getId());
dest.writeString(user.getName());
dest.writeString(user.getGender());
dest.writeParcelable(user.getBitmap(), PARCELABLE_WRITE_RETURN_VALUE);
}

/** 反序列化
* 注意 CREATOR 必须有 并且 必须是这个名 也必须是 public static (可以再有 final 修饰)否则会报异常 badparceableexception
*/
public static  Parcelable.Creator CREATOR = new Parcelable.Creator() {

@Override
public ParcelableUtil createFromParcel(Parcel source) {
return new ParcelableUtil(source);
}

@Override
public ParcelableUtil[] newArray(int size) {

return new ParcelableUtil[size];
}
};


           二、如果是传递对象类型,可以直接对象实体类实现Parcelable接口,其中代码跟上边类似,个人感觉更简单了。

          

           三、如何使用,直接见以下代码:
//  传递数据
Listlist = new ArrayList();
Bitmap bitmap =  BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);

for (int i = 0; i < 5; i++) {
User user =  new User(i, "萧 = "+i, "male = "+i);
user.setBitmap(bitmap);
list.add(user);
}
@SuppressWarnings("rawtypes")
ArrayList ll = new ArrayList ();  // 别考虑泛型的问题,就这样写 怕出异常直接try catch
ll.add(list);
User user =  new User(1, "萧", "male");
user.setBitmap(bitmap);
//	ParcelableUtil util = new ParcelableUtil(user);         // 借用工具类  将对象parcelable序列化
Bundle  bundle = new Bundle();
bundle.putParcelable("user", user);                 //  直接传递
//  bundle.putParcelable("user" , util);    			// 传递工具类对象
bundle.putParcelableArrayList("list", ll);

// 接收数据
Intent intent = getIntent();
Bundle bundle =  intent.getBundleExtra("data");
ArrayList arrayList  = bundle.getParcelableArrayList("list");
List list = (List) arrayList.get(0);
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
//	ParcelableUtil util = bundle.getParcelable("user");
//	User user = util.getUser();
User user = bundle.getParcelable("user");

          

项目下载地址:http://download.csdn.net/detail/ouyangjiluo/7106259

                   

[align=left]
[/align]

[align=left] 
[/align]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息