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中的数据重新写入到相应的对象中,注意写的顺序。详情见以下代码:
二、如果是传递对象类型,可以直接对象实体类实现Parcelable接口,其中代码跟上边类似,个人感觉更简单了。
三、如何使用,直接见以下代码:
项目下载地址:http://download.csdn.net/detail/ouyangjiluo/7106259
[align=left]
[/align]
[align=left]
[/align]
[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]
相关文章推荐
- android: activity之间传递复杂数据类型[使用Serializable序列化或者Parcelable序列化]
- android 用Parcelable传递复杂数据类型
- Android通过ksoap2传递复杂数据类型及CXF发布的webservice详细介绍
- Android通过ksoap向webserice传递复杂类型数据
- Android开发:使用序列化接口Parcelable、Serializable实现Activity间传递复杂数据类型参数
- android之Intent复杂数据的传递(ArrayList<Object>类型的数据)
- android 在activity之间传递复杂数据类型
- android 用Parcelable传递复杂数据类型
- AIDL进程间传递复杂数据类型—AIDL传递android.os.Parcelable接口
- Android开发:使用序列化接口Parcelable、Serializable实现Activity间传递复杂数据类型参数
- android之Intent复杂数据的传递一(Object类型的数据)
- Android通过ksoap2传递复杂数据类型,服务端为CXF发布的webservice,亲手写的代码
- Android:使用AIDL实现进程间传递复杂数据类型
- android之Intent复杂数据的传递二(Object类型的数据)
- Android开发:使用序列化接口Parcelable、Serializable实现Activity间传递复杂数据类型参数
- android 用Parcelable传递复杂数据类型
- android 用Parcelable传递图片等复杂数据类型
- android Service之四:传递复杂数据类型的远程服务
- android Service之四:传递复杂数据类型的远程服务
- Android学习——Intent传递复杂数据类型