Android的持久化技术分为以下5种:
- 文件存储
- SharedPreferences
- 数据库存储
- ContentProvider
- 网络存储
文件存储
Context类提供了一个openFileOutput()的方法,可以将数据存储到指定发文件当中。该方法接受两个参数,第一个为文件名,文件默认保存在/data/data//files目录下,第二个参数是文件的操作模式,可选MODE_PRIVATE和MODE_PRIVATE。其中默认为MODE_PRIVATE,表示如果该文件已存在即覆盖该文件,MODE_PRIVATE表示在文件若已存在即在文件中追加内容;
//保存数据
public void save(String data) {
FileOutputStream out = null;
BufferedWriter writer = null;
try {
out = openFileOutput("data", Context.MODE_PRIVATE);
writer = new BufferedWriter(new OutputStreamWriter(out));
writer.write(data);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (writer != null) {
try {
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
//读取数据
public String getData() {
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 (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return content.toString();
}
SharedPreferences
不同于文件存储,SharedPreferences 是使用键值对的方式来存储数据的
Android中提供了三种方式来获得SharedPreferences 对象
Context中的getSharedPreferences ()
该方法接受两个参数,第一个为文件名,文件默认保存在/data/data//shared_prefs目录下,第二个参数是文件的操作模式,可选MODE_PRIVATE。
Activity类中的getPreferences()
该方法和getSharedPreferences()很相似,只接收一个操作模式参数,自动将当前类名作为文件名。
PreferencesManager中的getDefaultSharedPreferences()
该方法是一个静态方法,接受一个Context参数,以应用程序的包名作为前缀来命名文件名。
public void save(){
//获取SharedPreferences.Editor对象
SharedPreferences.Editor editor = getSharedPreferences("data",MODE_PRIVATE).edit();
//添加数据
editor.putString("name","Tom");
editor.putInt("age",18);
//提交
editor.apply();
}
public void getData(){
SharedPreferences pref = getSharedPreferences("data",MODE_PRIVATE);
String name = pref.getString("name","");
int age = pref.getInt("age",0);
Log.d("MainActivity", "name is "+name+",age is "+age);
}