Android 序列化 Parcelable 跟 Serializable
来源:互联网 发布:轻论坛cms 编辑:程序博客网 时间:2024/05/29 12:32
在Android开发的过程中,有些时候,我们需要在Activity之间传递对象。那么此时,就需要将该对象序列化。
序列化方式有两种,一种是Serializable,用起来也比较简单。只要将所用对象实现Serializable便可。 另外一种是Parcelable,这种是android自身所带有的序列化。
实现Serializable接口是Java SE本身就支持的,而Parcelable是Android特有的功能,效率比实现Serializable接口高。
下面写一个实体类实现Parcelable,其中的类成员变量覆盖了String, int, List, boolean几个常见的数据类型以及对象类型,具体步骤有4个
1、声明实现接口Parcelable
2、实现Parcelable的方法writeToParcel,将你的对象序列化为一个Parcel对象
3、实例化静态内部对象CREATOR实现接口Parcelable.Creator 。Java代码如下
public static final Parcelable.Creator<T> CREATOR
其中public static final一个都不能少,内部对象CREATOR的名称也不能改变,必须全部大写。
4、完成CREATOR的代码,实现方法createFromParcel,将Parcel对象反序列化为你的对象 。
package com.botision.chat.boti.bean;import android.os.Parcel;import android.os.Parcelable;import java.util.ArrayList;import java.util.Arrays;import java.util.List;/** * Created by Botision.Huang on 2015/7/24. */public class AlipayOrders implements Parcelable { private String alipayNo; private int orderAcount; private List<Order> orders; private boolean isPay; private Order orderItem; private List<String> urlStrings = new ArrayList<String>(); public static final Creator<AlipayOrders> CREATOR = new Creator<AlipayOrders>() { @Override public AlipayOrders createFromParcel(Parcel parcel) { return new AlipayOrders(parcel); } @Override public AlipayOrders[] newArray(int size) { return new AlipayOrders[size]; } }; public AlipayOrders(Parcel parcel){ this.alipayNo = parcel.readString(); this.orderAcount = parcel.readInt(); Parcelable[] pars = parcel.readParcelableArray(Order.class.getClassLoader()); this.orders = Arrays.asList(Arrays.asList(pars).toArray(new Order[pars.length])); this.isPay = parcel.readByte() != 0; this.orderItem = parcel.readParcelable(Order.class.getClassLoader()); parcel.readStringList(this.urlStrings); } @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int i) { dest.writeInt(this.orderAcount); dest.writeParcelableArray(this.orders.toArray(new Order[this.orders.size()]), i); dest.writeByte((byte) (this.isPay ? 1 : 0)); dest.writeParcelable(this.orderItem, i); dest.writeStringList(this.urlStrings); } public String getAlipayNo() { return alipayNo; } public void setAlipayNo(String alipayNo) { this.alipayNo = alipayNo; } public int getOrderAcount() { return orderAcount; } public void setOrderAcount(int orderAcount) { this.orderAcount = orderAcount; } public List<Order> getOrders() { return orders; } public void setOrders(List<Order> orders) { this.orders = orders; } public boolean isPay() { return isPay; } public void setIsPay(boolean isPay) { this.isPay = isPay; } public Order getOrderItem() { return orderItem; } public void setOrderItem(Order orderItem) { this.orderItem = orderItem; } public List<String> getUrlStrings() { return urlStrings; } public void setUrlStrings(List<String> urlStrings) { this.urlStrings = urlStrings; }}
最后再说明下,如果该实体类是用于GSON解析的话,那么CREATOR中的每一项的顺序(上面代码被我new了一个方法出来)必须与writeToparcel中的每一项相同。这样,在解析JSON时,才不会报错。
- Android 序列化 Parcelable 跟 Serializable
- Android-序列化,Parcelable,Serializable
- Android Serializable Parcelable 序列化
- Android 序列化Serializable、Parcelable
- Android序列化:Serializable & Parcelable
- Android序列化Parcelable、Serializable
- Android序列化:Parcelable/Serializable
- Android -序列化 : Serializable / Parcelable
- Android序列化:Serializable Parcelable
- android序列化 Parcelable和Serializable接口
- android序列化Serializable、Parcelable(一)
- Android序列化:Serializable和Parcelable详解
- Android 序列化 Parcelable和Serializable 浅谈
- Android使用序列化接口Parcelable、Serializable
- Android使用序列化接口Parcelable、Serializable
- Android使用序列化接口Parcelable、Serializable
- Android序列化Serializable和Parcelable区别
- android序列化之Serializable,Parcelable
- 多线程(一)
- HDU 5307 He is Flying【FFT】
- 安装 SQL Server 客户端驱动程序
- 添加按钮\小程序查看器.java
- 系统架构设计应考虑的因素
- Android 序列化 Parcelable 跟 Serializable
- undefined reference to `boost::system::generic_category()
- oracle,通过plsql创建用户表空间和所属用户示例
- Docker ssh远程连接使用
- 【尝鲜版】驱动级网站防护软件-浪潮云戟
- Codeforces Round #313 (Div. 2) (ABCD)
- BZOJ 1004 [HNOI2008]Cards 置换+burnside定理+逆元
- 如何在Eclipse里面更新添加主题
- os.rename()导致WindowsError: [Error 183]的问题