第五章 以数据为中心—数据存取(3)

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

时间: 2024-10-20 00:22:11

第五章 以数据为中心—数据存取(3)的相关文章

第五章 以数据为中心—数据存取(1)

第五章以数据为中心-数据存取 典型的桌面操作系统提供一种公共文件系统--任何应用软件可以使用它来存储和读取文件,该文件也可以被其它的应用软件所读取(会有一些权限控制设定).而Android 采用了一种不同的系统.在Android 中,所有的应用软件数据(包括文件)为该应用软件所私有.然而,Android 同样也提供了一种标准方式供应用软件将私有数据开放给其它应用软件.这一章将描述一个应用软件存储和获取数据.开放数据给其他应用软件.从其他应用软件请求数据并且开放它们的多种方式. 可供选择的存储方式

第五章 以数据为中心—数据存取(2)

5.1.2结构性的文件-读写XML文件 通过上面的介绍我们可以自由的操作Android中普通的文本文件了,下面我们来介绍下Android中比较常用的结构性的文件-XML文件. XML,可扩展标记语言(Extensible Markup Language),用于标记电子文件,使其具有结构性的标记语言,可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言. AndroidSDK提供了如下package来支持XML的读写: l  javax.xml  根据XML规范定义核心X

第五章 以数据为中心—数据存取(5)

5.2.3添加.删除和修改操作 下面具体说明如何进行添加.删除.修改的操作.下面我们将这些动作封装在一个类DBHelper中,通过这个类的几个方法,可以具体看到如何进行数据库的各种操作. // import略 public class DBHelper { private static final String[] COLS = new String[] { "_id","name"}; private SQLiteDatabase db; private fina

第五章 以数据为中心—数据存取(6)

5.3安全方便简单-使用SharedPreferences 前面操作文件和数据库都相对比较复杂,需要打开,读取,关闭等等操作.可能有人就想,如果我只是需要存取几个简单的数据,有没有简单点的方法呢?的确,在Android中也封装了一种轻便的数据存取的方法-Preferences. Preferences是一种轻量级的数据存储机制,它将一些简单数据类型的数据,包括boolean类型.int类型.float类型.long类型以及String类型的数据,以键值对的形式存储在应用程序的私有Preferen

第五章 以数据为中心—数据存取(4)

5.2通用的数据操作方式-数据库 说到数据的存取,数据库肯定是一个常用的解决方案.Android中也有它自己的数据库,下面我们来看看Android中的数据库与一般的数据库有什么不一样的地方. 5.2.1SQLite数据库介绍 目前在Android系统中集成的是SQLite3版本,它支持SQL语句,它是一个轻量级的嵌入式数据库.SQLite支持NULL.INTEGER.REAL.TEXT和BLOB数据类型,不支持静态数据类型,而是使用列关系.可以把SQLite数据库近似看成是一种无数据类型的数据库

第七章 以数据为中心的程序设计

本章介绍 ■ 表示和处理文档 ■ 设计不可变数据结构 ■ 数据表示形式之间的转换 ■ 使用记录和递归差别联合 在设计函数式程序时,首先要考虑的是程序处理的数据:由于重要的程序都使用数据,因此,在应用程序设计中,这个方面极为重要.用函数语言实现程序,我们也是从设计在代码中用到的数据结构开始:下一步才会写处理数据的运算. 但是不同于面向对象的设计,它是把数据封装在对象的状态中:处理用方法表示,是对象的一部分,在运算中还可以和其他有关对象进行交互.而大多数函数式程序是以数据为中心的,因此,数据与运算明

第五章 数据存储

第五章 数据存储 我们用解析器解析出数据之后,接下来的一步就是对数据进行存储了,保存的形式可以多种多样,最简单的形式可以直接保存为文本文件,如 TXT.Json.CSV 等等,另外还可以保存到数据库中,如关系型数据库 MySQL,非关系型数据库 MongoDB.Redis 等等.那么本章我们就来统一了解一下数据的保存方式. 5.1 文件存储 文件存储形式可以是多种多样的,比如可以保存成 TXT 纯文本形式,也可以保存为 Json 格式.CSV 格式等,本节我们来了解下文本文件的存储方式. 5.1

第五章:大数据 の HBase 进阶

本课主题 HBase 读写数据的流程 HBase 性能优化和最住实践 HBase 管理和集群操作 HBase 备份和复制 引言 前一篇 HBase 基础 (HBase 基础) 简单介绍了NoSQL是什么和重点讨论 HBase 数据库的特点,在这一篇会进一步介绍 HBase 的其他特性和机制,比如读写数据的流程,在读写过程中 WAL,MemStore 的作用,还会谈谈一些数据缓存机制,明白在什么场景下需要用那一种缓存策略?如何对频繁使用的数据进行快速响应,从检索上提升查询效率和从内存层面上运用不同

大数据日知录【第五章:分布式协调系统】笔记--如何当选老大?如何加入组织?如何将组织的意愿传递下去

Chubby: 保持高可用性和可靠性,不追求读写的高吞吐量,所有的读写请求都有主控服务器完成,其他的备份服务器在内存中维护和主控服务器完全一致的树形结构,此时从属服务器的作用在于系统的整体的可靠性. Zookeeper: 每一个节点都可以处理读请求,写请求只能由主控服务器处理,此时从属服务器的作用在于提高系统读的吞吐量(有可能会导致读取的数据是老数据). Zookeeper主要应用场景: 选举老大 配置管理:配置文件存储在某个节点上,其他节点都是观察者,启东市可以读取也可以订阅改配置消息. 组成