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

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


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





你可能感兴趣的:(android)