不懂的地方就要花力气搞懂,自己以前没太认真,所以吃了很多亏啊。切入今天的主题。
我们的项目中为了实现某些二次编辑的效果,就必须对一些数据进行存储,而能够将对象存储起来,对于我们的开发有时会显得十分的方便,这篇文章主要介绍如何将对象存储于本地,在下一篇文章中我们接着讨论如何将对象存储于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. 保存对象
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. 取得对象
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("读取对象失败");
}