数据持久化
数据持久化是指将内存中的瞬时数据保存到存储设备,从而保证在程序关闭时这些数据任然不会丢失。Android下主要提供了三种方式用于简单的实现数据持久化的功能,它们分别是文件存储、SharedPreference存储以及数据库存储。这里只总结文件存储和SharedPreference存储,数据库存储放在下一篇中单独总结。
一.文件存储
文件存储是Android中最基本的一种数据存储方式,它会将所有数据原封不动的通过IO流保存在文件当中,所以它只适合用于存储简单的文本数据或者二进制数据。
1.使用openFileOutput()保存数据
在openFileOutput()方法中接收两个参数,第一个参数为文件名,此文件名不可以包含路径,因为其默认存在/data/data//files/目录下,第二个参数为操作模式MODE_PRIVATE或MODE_APPEND。此方法返回一个FileOutputStream对象,通过IO流即可将数据写入指定文件中:
private void save(String mstring) {
FileOutputStream fos;
BufferedWriter writer = null;
try {
fos = openFileOutput("user_data", MODE_PRIVATE);
writer = new BufferedWriter(new OutputStreamWriter(fos));
writer.write(mstring);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (writer != null) {
try {
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
2.使用openFileInputStream()读取数据
private String restore(){
BufferedReader reader = null;
StringBuilder builder = null;
try {
builder = new StringBuilder();
String line = null;
FileInputStream fis = openFileInput("user_data");
reader = new BufferedReader(new InputStreamReader(fis));
while ((line = reader.readLine()) != null){
builder.append(line);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
if(reader != null){
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return builder.toString();
}
二.SharedPreferences存储
不同于文件存在,SharedPreferences是通过键值对来存储数据的。要想使用SharedPreferences存储数据,首先要获得SharedPreferences对象。Android提供了三种方法。
1.Context类中的getSharedPreferences()方法;
SharedPreferences preferences = getSharedPreferences("share", MODE_PRIVATE);
2.Activity类中的getPreferences()方法;
SharedPreferences preferences = getPreferences(MODE_PRIVATE);
3.PreferenceManage类中的getDefaultSharedPreferences()方法。
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
得到SharedPreferences对象后就可以使用它存储数据了。
1.向SharedPreferences文件存储数据
STEP 1:调用SharedPreferences对象的edit()方法获取一个Editor对象;
STEP 2:向Editor对象添加数据;
STEP 3:调用commit()方法提交,其内部是一个序列化的过程。
SharedPreferences preferences = getSharedPreferences("shared", MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.putString("name","张三");
editor.putInt("age",25);
editor.commit();
2.从SharedPreferences中读取数据
SharedPreferences preferences1 = getSharedPreferences("shared",MODE_PRIVATE);
String name = preferences1.getString("name", "");
int age = preferences1.getInt("age", 0);
Log.d(TAG,"name:" + name + " age:" + age);