http://blog.csdn.net/zhoudailiang/article/details/38064655
不懂的地方就要花力气搞懂,自己以前没太认真,所以吃了很多亏啊。切入今天的主题。
我们的项目中为了实现某些二次编辑的效果,就必须对一些数据进行存储,而能够将对象存储起来,对于我们的开发有时会显得十分的方便,这篇文章主要介绍如何将对象存储于本地,在下一篇文章中我们接着讨论如何将对象存储于SD卡中。
android中能够被保存的对象都是被序列化过的对象。如何让类实现序列化呢?其实就是让我们的类实现Serializable接口。
打开Serializable的源代码,我们会发现:
- public interface Serializable {
- }
对,没错,Serializable是个空接口,其实这里我们也可以看出,Serializable的作用就是一个标识作用。
我这里写了一个非常简单的类,如下:
- public class SaveObjectDemo implements Serializable {
- private static final long serialVersionUID = 1L;
- private String name;
- private int age;
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public int getAge() {
- return age;
- }
- public void setAge(int age) {
- this.age = age;
- }
- }
然后在主Activity中实现了保存对象和取的对象的方法:
1. 保存对象
- <span style="white-space:pre"> </span>/**
- * @function 将一个对象保存到本地
- * @author D-light
- * @time 2014-07-23
- * @param String name
- * @return void
- */
- private void saveObject(String name){
- FileOutputStream fos = null;
- ObjectOutputStream oos = null;
- try {
- fos = this.openFileOutput(name, MODE_PRIVATE);
- oos = new ObjectOutputStream(fos);
- oos.writeObject(sod);
- } catch (Exception e) {
- e.printStackTrace();
- //这里是保存文件产生异常
- } finally {
- if (fos != null){
- try {
- fos.close();
- } catch (IOException e) {
- //fos流关闭异常
- e.printStackTrace();
- }
- }
- if (oos != null){
- try {
- oos.close();
- } catch (IOException e) {
- //oos流关闭异常
- e.printStackTrace();
- }
- }
- }
- }
2. 取得对象
- <span style="white-space:pre"> </span>/**
- * @function 从本地读取保存的对象
- * @author D-light
- * @time 2014-07-23
- * @param String name
- * @return Object
- */
- private Object getObject(String name){
- FileInputStream fis = null;
- ObjectInputStream ois = null;
- try {
- fis = this.openFileInput(name);
- ois = new ObjectInputStream(fis);
- return ois.readObject();
- } catch (Exception e) {
- e.printStackTrace();
- //这里是读取文件产生异常
- } finally {
- if (fis != null){
- try {
- fis.close();
- } catch (IOException e) {
- //fis流关闭异常
- e.printStackTrace();
- }
- }
- if (ois != null){
- try {
- ois.close();
- } catch (IOException e) {
- //ois流关闭异常
- e.printStackTrace();
- }
- }
- }
- //读取产生异常,返回null
- return null;
- }
有了这两个方法后,我们就进行调用:
- sod = new SaveObjectDemo();
- sod.setName("zhoujielun");
- sod.setAge(20);
- //保存对象到本地
- saveObject("object.dat");
- //得到保存于本地路径的对象
- SaveObjectDemo s = (SaveObjectDemo) getObject("object.dat");
- System.out.println("姓名:" + s.getName() + ", 年龄:" + s.getAge());
最后可以得到如下的结果:
PS: 有段代码写的不够严谨,如下:
- if (null != s) {
- System.out.println("姓名:" + s.getName() + ", 年龄:" + s.getAge());
- } else {
- System.out.println("读取对象失败");
- }