目录
数据持久化是将内存中的顺势数据保存下来。
Android中的持久化技术一般来讲有三种:文件存储、SharePreferences存储以及数据库存储。
1.文件存储
文件存储不对存储内容做任何的格式化处理,所有数据都是原封不动的保存到文件中。因而比较适合存储简单的文本数据或者二进制数据,如果想要存储复杂的文本数据,就需要定义一套合适规范,方便解析。
如何将数据存储到文件中。Context类中提供了openFileOutput(String name, int mode)
name是文件名,不包括路径,文件存储的路径默认为/data/data/<package name>/files/的目录下。
mode操作模式,
MODE_PRIVATE:默认模式,覆盖源文件,
MODE_APPEND:在已存在文件中追加,不存在文件则新建。
代码示例:
public void save(){
String data = "data to save";
FileOutputStream out =null;
BufferedWriter writer = null;
try {
out = openFileOutput("data", Context.MODE_PRIVATE);
writer = new BufferedWriter(new OutputStreamWriter(out));
writer.write(data);
}catch (IOException e){
e.printStackTrace();
}finally {
try{
if(writer != null){
writer.close();
}
}catch (IOException e){
e.printStackTrace();
}
}
}
通过openFileOutput()得到FileOutputStream对象,然后通过FileOutputStream对象得到OutputStreamWriter,进而构建一个BufferedWriter将String类型的变量写进文件。
文件中读取数据。用到类似的openFileInput(String name),只有一个文件名的参数。
代码示例:
public String load(){
FileInputStream in = null;
BufferedReader reader = null;
StringBuilder content = new StringBuilder();
try {
in = openFileInput("data");
reader = new BufferedReader(new InputStreamReader(in));
String line = "";
while ((line=reader.readLine()) !=null) {
content.append(line);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if(reader != null){
try {
reader.close();
} catch (IOException e ){
e.printStackTrace();
}
}
}
return content.toString();
}
2.SharePreferences存储
SharePreferences按照key:value存储,也就是存储的数据需要给他一个键值,我们还可以通过键值将它取出,数据类型不会变化。
将数据存储到SharePreferences中。先得到SharedPreferencesd对象,下面有三种方法。
- Context类中getSharedPreferences(String name,int mode)方法。name是文件名,SharePreferences文件都是存放在/data/data/<package name>/shared_prefs/目录下,mode操作模式,目前只有MODE_PRIVATE一种可以选,和传入0效果相同。表示只有当前应用可以读写。
- Activity 类中的getSharedPreferences(int mode)方法,没了name,因为这个方法自动将类的名字作为文件名。
- PreferenceManager类中的getDefaultPreferences()
public static SharedPreferences getDefaultSharedPreferences(Context context) {
return context.getSharedPreferences(getDefaultSharedPreferencesName(context),
getDefaultSharedPreferencesMode());
}
这是一个静态方法,接受一个context,并且自动使用当前程序包名作为前缀来命名SharedPreferences文件。
得到了SharedPreferences对象后,就可以进行数据存储了,主要分为3步。
- 调用SharedPreferences.edit(),获取SharedPreferences.Editor对象。
- 调用Editor.putXXX方法添加数据。例如加入String类型的数据。Editor.putString(“name”,”xiaojili”);
- 调用apply(),提交数据。
代码示例:
SharedPreferences.Editor editor = getSharedPreferences("data",0).edit();
editor.putBoolean("boolean",true);
editor.putString("name","xiaojili");
editor.apply();
SharedPreferences文件是一个XML
读取SharedPreferences中的数据。
这个就比较简单了,先获取SharedPreferences对象然后getXXX,上代码:
SharedPreferences sharedPreferences = getSharedPreferences("data",0);
String name = savedInstanceState.getString("name","");
我们获取data文件中,key为name的值,如果不存在key值,name赋值””。
3.数据库存储
东西太多明天再写