Android系统中主要提供了3种方式用于简单地实现数据持久化功能,即文件存储、SharedPreferences存储以及数据库存储。
文件存储
将数据存储到文件中
借助Context.openFileOutput()方法,可以将数据输出到指定文件。
openFileOutput()方法接收两个参数。第一个参数是文件名,在文件创建的时候使用的就是这个名称,注意这里指定的文件名不可以包含路径,因为所有的文件都是默认存储到/data/data/
openFileOutput()得到一个FileOutputStream对象。再绑定构建一个OutputStreamWriter对象,构建一个BufferedWriter对象。最后通过BufferedWriter.write()来将文本内容写入到文件中。
代码示例
public class MainActivity extends AppCompatActivity{
private EditText edit;
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
edit = (EditText) findViewById(R.id.edit);
}
protected void onDestory(){
super.onDestory();
String inputText = edit.getText().toString();//用getText()方法得到输入的数据
save(inputText);//调用存储方法
}
public void save(String data){
//String data = "data to save";
FileOutputStream outputStream = null;
BufferedWriter bufferedWriter = null;
try{
outputStream = openFileOutput("data", Context.MODE_PRIVATE);
bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream));
bufferedWriter.write(data);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (bufferedWriter != null){
bufferedWriter.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
从文件中读取数据
Context类中还提供了一个openFileInput()方法,用于从文件中读取数据。这个方法要比openFileOutput()简单一些,它只接收一个参数,即要读取的文件名,然后系统会自动到/data/data/
实例代码:
public String load(){
FileInputStream inputStream = null;
BufferedReader bufferedReader = null;
StringBuilder content = new StringBuilder();
try{
inputStream = openFileInput("data");
bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
String line = "";
while ((line = bufferedReader.readLine())!=null){
content.append(line);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (bufferedReader != null){
bufferedReader.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return content.toString();
}
SharedPreferences
SharedPreferences通过key-value方式储存信息。
存入数据
使用步骤:
- 得到SharedPreferences对象
- Context.getSharedPreferences()
- Activity类.getPreferences()
- PreferenceManager类.getDefaultSharedPreferences()
方法接收两个参数。第一个参数是文件名,不存在就会创建一个。SharedPreferences文件保存在/data/data/
- 调用SharedPreferences.edit()方法来获得SharedPreferences.Editor对象
- SharedPreferences中添加数据。putBoolean(), putString(), putInt()
- SharedPreferences.apply()提交
取出数据
SharedPreferences下有多个get方法。如getString(), getBoolean()。接收2个参数,一个是key,一个是default value
数据库存储
当存储大量复杂关系型数据时,需要用到数据库。
如何使用?
继承SQLiteOpenHelper类,重写onCreate(), onUpgrade()方法.
getReadableDatabase()和getWritableDatabase()方法分别返回可以读写的对象。
SQLiteOpenHelper中有两个构造方法可供重写,一般使用参数少一点的那个构造方法即可。这个构造方法中接收4个参数,第一个参数是Context,这个没什么好说的,必须要有它才能对数据库进行操作。第二个参数是数据库名,创建数据库时使用的就是这里指定的名称。第三个参数允许我们在查询数据的时候返回一个自定义的Cursor,一般都是传入null。第四个参数表示当前数据库的版本号,可用于对数据库进行升级操作。构建出SQLiteOpenHelper的实例之后,再调用它的getReadableDatabase()或getWritableDatabase()方法就能够创建数据库了,数据库文件会存放在/data/data/
创建数据库
升级数据库
添加数据
删除数据
查询数据
使用SQL操作数据库