现在的位置: 首页 > 综合 > 正文

android 将对象存储于本地(内存)

2016年12月04日 ⁄ 综合 ⁄ 共 3633字 ⁄ 字号 评论关闭

http://blog.csdn.net/zhoudailiang/article/details/38064655

不懂的地方就要花力气搞懂,自己以前没太认真,所以吃了很多亏啊。切入今天的主题。

我们的项目中为了实现某些二次编辑的效果,就必须对一些数据进行存储,而能够将对象存储起来,对于我们的开发有时会显得十分的方便,这篇文章主要介绍如何将对象存储于本地,在下一篇文章中我们接着讨论如何将对象存储于SD卡中。

android中能够被保存的对象都是被序列化过的对象。如何让类实现序列化呢?其实就是让我们的类实现Serializable接口。

打开Serializable的源代码,我们会发现:

[java] view
plain
copy

  1. public interface Serializable {  
  2. }  

对,没错,Serializable是个空接口,其实这里我们也可以看出,Serializable的作用就是一个标识作用。

我这里写了一个非常简单的类,如下:

[java] view
plain
copy

  1. public class SaveObjectDemo implements Serializable {  
  2.   
  3.     private static final long serialVersionUID = 1L;  
  4.       
  5.     private String name;  
  6.     private int age;  
  7.       
  8.     public String getName() {  
  9.         return name;  
  10.     }  
  11.     public void setName(String name) {  
  12.         this.name = name;  
  13.     }  
  14.     public int getAge() {  
  15.         return age;  
  16.     }  
  17.     public void setAge(int age) {  
  18.         this.age = age;  
  19.     }  
  20. }  

然后在主Activity中实现了保存对象和取的对象的方法:

1. 保存对象

[java] view
plain
copy

  1. <span style="white-space:pre">    </span>/** 
  2.      * @function 将一个对象保存到本地 
  3.      * @author D-light 
  4.      * @time 2014-07-23 
  5.      * @param String name 
  6.      * @return void 
  7.      */  
  8.     private void saveObject(String name){  
  9.         FileOutputStream fos = null;  
  10.         ObjectOutputStream oos = null;  
  11.         try {  
  12.             fos = this.openFileOutput(name, MODE_PRIVATE);  
  13.             oos = new ObjectOutputStream(fos);  
  14.             oos.writeObject(sod);  
  15.         } catch (Exception e) {  
  16.             e.printStackTrace();  
  17.             //这里是保存文件产生异常  
  18.         } finally {  
  19.             if (fos != null){  
  20.                 try {  
  21.                     fos.close();  
  22.                 } catch (IOException e) {  
  23.                     //fos流关闭异常  
  24.                     e.printStackTrace();  
  25.                 }  
  26.             }  
  27.             if (oos != null){  
  28.                 try {  
  29.                     oos.close();  
  30.                 } catch (IOException e) {  
  31.                     //oos流关闭异常  
  32.                     e.printStackTrace();  
  33.                 }  
  34.             }  
  35.         }  
  36.     }  



2. 取得对象

[java] view
plain
copy

  1. <span style="white-space:pre">    </span>/** 
  2.      * @function 从本地读取保存的对象 
  3.      * @author D-light 
  4.      * @time 2014-07-23 
  5.      * @param String name 
  6.      * @return Object 
  7.      */  
  8.     private Object getObject(String name){  
  9.         FileInputStream fis = null;  
  10.         ObjectInputStream ois = null;  
  11.         try {  
  12.             fis = this.openFileInput(name);  
  13.             ois = new ObjectInputStream(fis);  
  14.             return ois.readObject();  
  15.         } catch (Exception e) {  
  16.             e.printStackTrace();  
  17.             //这里是读取文件产生异常  
  18.         } finally {  
  19.             if (fis != null){  
  20.                 try {  
  21.                     fis.close();  
  22.                 } catch (IOException e) {  
  23.                     //fis流关闭异常  
  24.                     e.printStackTrace();  
  25.                 }  
  26.             }  
  27.             if (ois != null){  
  28.                 try {  
  29.                     ois.close();  
  30.                 } catch (IOException e) {  
  31.                     //ois流关闭异常  
  32.                     e.printStackTrace();  
  33.                 }  
  34.             }  
  35.         }  
  36.         //读取产生异常,返回null  
  37.         return null;  
  38.     }  

有了这两个方法后,我们就进行调用:

[java] view
plain
copy

  1. sod = new SaveObjectDemo();  
  2. sod.setName("zhoujielun");  
  3. sod.setAge(20);  
  4.   
  5. //保存对象到本地  
  6. saveObject("object.dat");  
  7.   
  8. //得到保存于本地路径的对象  
  9. SaveObjectDemo s = (SaveObjectDemo) getObject("object.dat");  
  10. System.out.println("姓名:" + s.getName() + ", 年龄:" + s.getAge());  


最后可以得到如下的结果:

PS: 有段代码写的不够严谨,如下:

[java] view
plain
copy

  1. if (null != s) {  
  2.             System.out.println("姓名:" + s.getName() + ", 年龄:" + s.getAge());  
  3.         } else {  
  4.             System.out.println("读取对象失败");  
  5.         }  

抱歉!评论已关闭.