【android实战经验】实现Parcelable接口进行对象序列化

原创 2015年11月18日 14:47:25

Parcelable接口源码如下:

public interface Parcelable 
{
    //内容描述接口,基本不用管,一般返回0
    public int describeContents();
    //写入接口函数,打包
    public void writeToParcel(Parcel dest, int flags);
    //读取接口,目的是要从Parcel中构造一个实现了Parcelable的类的实例处理。因为实现类在这里还是不可知的,所以需要用到模板的方式,继承类名通过模板参数传入
    //为了能够实现模板参数的传入,这里定义Creator嵌入接口,内含两个接口函数分别返回单个和多个继承类实例
    public interface Creator<T> 
    {
           public T createFromParcel(Parcel source);
           public T[] newArray(int size);
    }
}

实现Parcelable接口步骤:

1. implements Parcelable;

2. 重写describContents()方法,用来描述接口内容,一般返回0

3. 重写writeToParcel()方法,用来将实现Parcelable的对象转成Parcel对象,进行序列化

4. 实现公共 静态 常量内部接口Parcelable.Creator<T>,重写内部的createFromParcel(),将Pacel对象转化为原来的对象,进行反序列化,注意读取顺序一定与writeToParcel()写入顺序一致重写内部的newArray()方法,newArray(int size) 创建一个类型为T,长度为size的数组,仅一句话即可(return new T[size]),供外部类反序列化本类数组使用。


实现Parcelable的例子:

public class Person implements Parcelable {

	private String name;
	private boolean sex;
	private int phone;

	public Person() {} // 获取Parcel对象数据的构造方法

	public Person(String name, boolean sex, int phone) {// 外部提供写出数据的构造方法
		super();
		this.name = name;
		this.sex = sex;
		this.phone = phone;
	}

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

	@Override
	public void writeToParcel(Parcel out, int flags) {
		out.writeString(name);
		out.writeInt(sex ? 1 : 0); // 因为Parcel对象的方法没有针对Boolean的写出方法,转成int型写出
		out.writeInt(phone);
	}

	public static final Parcelable.Creator<Person> CREATOR = new Creator<Person>() {//注意Creator的对象名称必须是CREATOR
		@Override
		public Person[] newArray(int size) {//供外部类方便创建该Parcelable序列化类的数组
			return new Person[size];
		}

		@Override
		public Person createFromParcel(Parcel in) {//注意反序列化的顺序与序列化的顺序一致
			Person person = new Person();
			person.name = in.readString();
			person.sex = in.readInt() == 1 ? true : false;
			person.phone = in.readInt();

			return person;
		}
	};

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public boolean getSex() {
		return sex;
	}

	public void setSex(boolean sex) {
		this.sex = sex;
	}

	public int getPhone() {
		return phone;
	}

	public void setPhone(int phone) {
		this.phone = phone;
	}

}


进行序列化的应用场景:

1)永久性保存对象,保存对象的字节序列到本地文件中;

2)通过序列化对象在网络中传递对象;

3)通过序列化在跨进程间传递对象。


参考网址:http://www.cnblogs.com/renqingping/archive/2012/10/25/Parcelable.html


版权声明:本文为博主原创文章,未经博主允许不得转载。

Android Parcelable接口使用心得

Android开发中使数据序列化有两种方法:实现Serializable接口或者实现Parcelable接口,Serializable接口是JAVA提供的一个序列化方法,相对于Parcelable接口...
  • q540431546
  • q540431546
  • 2015年05月18日 12:23
  • 915

Android 快速实现Parcelable接口

Android序列化有两种方式, 实现Serializable, 这种直接 implements Serializable就好了. 另一种就是实现Parcelable 需要写一些代码. 好在有andr...
  • MAIMIHO
  • MAIMIHO
  • 2016年07月18日 22:42
  • 1462

android中Parcelable接口的使用

android中Parcelable的使用 一、理解 Parcelable是一个接口、用来实现序列化。与此类似的还有一个接口Serializable,这是JavaSE本身支持的,而Parcelable...
  • u010142437
  • u010142437
  • 2014年04月19日 15:28
  • 10568

Android继承Parcelable接口传递复杂数据类型

Android继承Parcelable接口传递ArrayList、自定义类等复杂数据类型。 Dictionary.class package com.shen.toolbox.function.e...
  • shenyuanqing
  • shenyuanqing
  • 2016年01月05日 10:24
  • 1723

Android-Parcelable理解与使用(对象序列化)

http://my.oschina.net/zhoulc/blog/172163 parcel定义介绍:     android提供了一种新的类型:parcel(英文解释:包裹,小包),本类用...
  • jaycee110905
  • jaycee110905
  • 2014年03月19日 10:52
  • 12343

Android Parcelable 序列化 的时候:已经序列化的对象, 数组,boolean,Bitmap;

parcelable序列化 :对象,数组,boolean,bitmap; 一、序列化分为:序列化过程 和 反序列化过程:一)序列化过程: //序列化过程 一系列write方法 //其中f...
  • a2241076850
  • a2241076850
  • 2017年04月07日 16:38
  • 594

Android Studio酷炫插件(一)——自动化快速实现Parcelable接口序列化

相信数据序列化大家都多多少少有接触到,比如自定义了一个实体类,需要在activity之间传输该类对象,就需要将数据序列化。android中实现方式有两种,第一、实现Serializable接口,这种比...
  • chequer_lkp
  • chequer_lkp
  • 2014年11月07日 23:21
  • 19072

Android Parcelable代码自动生成插件 Parcelable code generator

大家有没有觉得写实现Parcelable接口的代码很麻烦呢,这篇文章教你自动生成Parcelable接口代码,妈妈再也不用担心我写代码没时间刷知乎了. 使用方法: 安装:Android Studi...
  • ligen52
  • ligen52
  • 2017年01月22日 17:51
  • 672

Android开发当中Parcelable,Serializable接口的使用

Activity之间传数据时,为了避免麻烦,往往会将一些值封装成对象,然后将整个对象传递过去。 对于Android来说传递复杂类型,主要是将自己的类转换为基础的字节数组,Activity之间传递数据...
  • Jo__yang
  • Jo__yang
  • 2015年03月09日 14:35
  • 775

实体bean实现序列化parcelable接口的常见问题

在intent中传递对象或者集合的时候,相应的对象要实现序列化。 public class Person implements Parcelable{              // 成员变...
  • lr4321
  • lr4321
  • 2015年10月21日 19:35
  • 505
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【android实战经验】实现Parcelable接口进行对象序列化
举报原因:
原因补充:

(最多只允许输入30个字)