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


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

/** * @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. 取得对象   

/** * @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();}}}//读取产生异常,返回nullreturn 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("读取对象失败");}





更多相关文章

  1. Evenbus思想解决切换网络高级处理(高级篇)
  2. Android(安卓)内存优化篇 - 使用profile 和 MAT 工具进行内存泄
  3. Android全屏截图的方法,返回Bitmap并且保存在SD卡上
  4. Android(安卓)-- Parcelable 序列化操作数据(上篇)
  5. Android(安卓)桌面组件【app widget】 进阶项目②--心情记录器
  6. android 缓存管理与常用算法
  7. java/android 设计模式学习笔记(8)---桥接模式
  8. Android中读取系统图库(包含相册)中的图片,显示图片与图片的路径
  9. Android(安卓)Framework学习(六)之RefBase,SP,WP

随机推荐

  1. Android学习进阶路线导航线路(Android源
  2. android 获取系统电量
  3. 【黑科技】钉钉自动打卡
  4. Android使用DigitalClock进行定时抢购
  5. Android(安卓)Toast提示封装
  6. [Android]查看KeyStore的MD5或SHA1签名
  7. Android(安卓)Studio插件大全
  8. Android(安卓)解决Recycler View: Incons
  9. Android(安卓)判断输入框是否为空
  10. Material Design