5.1.3自由操作随心所欲—序列化和反序列化

在Android开发中,除了经常会操作普通的文本文件和XML文件以外,也会经常使用序列化和反序列化的方式传递或者存取数据。

Android序列化对象主要有两种方法,实现Serializable接口、或者实现Parcelable接口。实现Serializable接口是Java SE本身就支持的,而Parcelable是Android特有的功能,效率比实现Serializable接口高,而且还可以用在IPC中。实现Serializable接口非常简单,声明一下就可以了,而实现Parcelable接口稍微复杂一些,但效率更高,推荐用这种方法提高性能。

下面就介绍一下使用Parcelable接口,实现两个Activity之间对象的传递,这里就要用到bundle.putParcelable实现传递对象。

1)声明实现接口Parcelable。

// import略

public class Person implements Parcelable{

protected String name;

protected String age;

Person(String name,String age) {

this.name = name;

this.age = age;

}

Person(Parcel in) {

name = in.readString();

age = in.readString();

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getAge() {

return age;

}

public void setAge(String age) {

this.age = age;

}

@Override

public int describeContents() {

return 0;

}

/**

* 实现Parcelable的方法writeToParcel,将你的对象序列化为一个Parcel对象

*/

@Override

public void writeToParcel(Parcel dest, int flags) {

dest.writeString(name);

dest.writeString(age);

}

/**

* 实例化静态内部对象CREATOR实现接口Parcelable.Creator

*/

public static final Creator<Person> CREATOR = new Creator<Person>() {

public Person createFromParcel(Parcel in) {

return new Person(in);

}

public Person[] newArray(int size) {

return new Person[size];

}

}; }

2)实现Parcel对象序列化为你的对象,并将Parcelable放入Bundle中。

// import略

public class ParcelableActivity1 extends Activity {

private Button myButton;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

myButton = new Button(this);

myButton.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View arg0) {

// 创建Person对象

Person benParcelable = new Person("testname","testage");

Intent intent = new Intent();

intent.setClass(getApplicationContext(),

ParcelableActivity2.class);

Bundle bundle = new Bundle();

// 将序列化对象放入bundle

bundle.putParcelable("person", benParcelable);

intent.putExtras(bundle);

// 启动ParcelableActivity2的Activity

startActivity(intent);

}

});

setContentView(myButton);

}

}

3)实现方法createFromParcel,将Parcel对象反序列化为你的对象。

// import略

public class ParcelableActivity2 extends Activity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

// 获取反序列化后的Person对象

Person parcelable = getIntent().getParcelableExtra("person");

// 打印输出

System.out.println(parcelable.getName());

System.out.println(parcelable.getAge());

}

}

-------------------------------------------- 程序员赚钱不易 一定要学会理财 平安陆金所 隶属于平安集团的p2p平台 年投资回报率7%-9% 是替代银行理财的首选 个人经验 推荐投资安鑫或者有担保的彩虹项目 不要投资安e 那个几乎无法转让 想提前提现非常困难 网站链接 http://affiliate.lufax.com/action/36XBU 首次投资1000元即可额外赚几百元 不赚白不赚 --------------------------------------------

4)显示结果,如图5-2所示。

图 5-2 序列化反序列化的结果

经验分享:

除了可以利用序列化和反序列化在Activity之间传递Object类型的数据以外,我们也可以利用它来保存和读取数据。

和纯文本文件、XML文件相比,序列化文件可以是二进制的文件,而不是纯文本的,不能直接阅读。所以,如果保存的数据有一定的安全性要求,而安全性的级别又不是非常高,就可以考虑使用序列化的方式进行保存,然后使用反序列化的方式读取。

更多相关文章

  1. Android:国家气象局天气预报接口JSON完全解析
  2. Android中文语音合成(TTS)各家引擎对比 .
  3. Android(安卓)C++ 多线程
  4. 软引用、弱引用和虚引用处理
  5. Android(安卓)获取屏幕高度、标题高度、状态栏高度详解
  6. Android实现音乐的播放与停止(Service的初级应用)
  7. Android涉及到的设计模式
  8. Android(安卓)日历提供器(三)
  9. Android问题集(七)——TableLayout 中让TableRow中的控件填充满整

随机推荐

  1. Android很有用的代码片段
  2. Android(安卓)中 如何生成class文件 后再
  3. android 进入页面隐藏输入法
  4. [置顶] android滑动基础篇
  5. Android4.1(Jelly Bean)API新特性尝鲜
  6. android 获取api key
  7. Android基于DataBinding的一个基础框架
  8. ionic 自动编译android的release版本
  9. Android(安卓)Material Design动画 Anima
  10. Android Studio Gradle多渠道打包(动态设