Android系统中主要提供了3种方式用于简单地实现数据持久化功能,即文件存储、SharedPreferences存储以及数据库存储

文件存储

将数据存储到文件中

借助Context.openFileOutput()方法,可以将数据输出到指定文件。

openFileOutput()方法接收两个参数。第一个参数是文件名,在文件创建的时候使用的就是这个名称,注意这里指定的文件名不可以包含路径,因为所有的文件都是默认存储到/data/data//files/目录下的。第二个参数是文件的操作模式,主要有两种模式可选,MODE_PRIVATE和MODE_APPEND。其中MODE_PRIVATE是默认的操作模式,表示当指定同样文件名的时候,所写入的内容将会覆盖原文件中的内容,而MODE_APPEND则表示如果该文件已存在,就往文件里面追加内容,不存在就创建新文件。

openFileOutput()得到一个FileOutputStream对象。再绑定构建一个OutputStreamWriter对象,构建一个BufferedWriter对象。最后通过BufferedWriter.write()来将文本内容写入到文件中。

代码示例

  1. public class MainActivity extends AppCompatActivity{
  2. private EditText edit;
  3. protected void onCreate(Bundle savedInstanceState){
  4. super.onCreate(savedInstanceState);
  5. setContentView(R.layout.activity_main);
  6. edit = (EditText) findViewById(R.id.edit);
  7. }
  8. protected void onDestory(){
  9. super.onDestory();
  10. String inputText = edit.getText().toString();//用getText()方法得到输入的数据
  11. save(inputText);//调用存储方法
  12. }
  13. public void save(String data){
  14. //String data = "data to save";
  15. FileOutputStream outputStream = null;
  16. BufferedWriter bufferedWriter = null;
  17. try{
  18. outputStream = openFileOutput("data", Context.MODE_PRIVATE);
  19. bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream));
  20. bufferedWriter.write(data);
  21. } catch (IOException e) {
  22. e.printStackTrace();
  23. } finally {
  24. try {
  25. if (bufferedWriter != null){
  26. bufferedWriter.close();
  27. }
  28. } catch (IOException e) {
  29. e.printStackTrace();
  30. }
  31. }
  32. }
  33. }

从文件中读取数据

Context类中还提供了一个openFileInput()方法,用于从文件中读取数据。这个方法要比openFileOutput()简单一些,它只接收一个参数,即要读取的文件名,然后系统会自动到/data/data//files/目录下去加载这个文件,并返回一个FileInputStream对象,得到了这个对象之后再通过Java流的方式就可以将数据读取出来了。

实例代码:

  1. public String load(){
  2. FileInputStream inputStream = null;
  3. BufferedReader bufferedReader = null;
  4. StringBuilder content = new StringBuilder();
  5. try{
  6. inputStream = openFileInput("data");
  7. bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
  8. String line = "";
  9. while ((line = bufferedReader.readLine())!=null){
  10. content.append(line);
  11. }
  12. } catch (IOException e) {
  13. e.printStackTrace();
  14. } finally {
  15. try {
  16. if (bufferedReader != null){
  17. bufferedReader.close();
  18. }
  19. } catch (IOException e) {
  20. e.printStackTrace();
  21. }
  22. }
  23. return content.toString();
  24. }

SharedPreferences

SharedPreferences通过key-value方式储存信息。

存入数据

使用步骤:

  1. 得到SharedPreferences对象
    1. Context.getSharedPreferences()
    2. Activity类.getPreferences()
    3. PreferenceManager类.getDefaultSharedPreferences()

方法接收两个参数。第一个参数是文件名,不存在就会创建一个。SharedPreferences文件保存在/data/data//shared_prefs/目录中。另一个是操作模式,只能选MODE_PRIVATE。

  1. 调用SharedPreferences.edit()方法来获得SharedPreferences.Editor对象
  2. SharedPreferences中添加数据。putBoolean(), putString(), putInt()
  3. 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//databases/目录下。此时,重写的onCreate()方法也会得到执行,所以通常会在这里去处理一些创建表的逻辑。

创建数据库

升级数据库

添加数据

删除数据

查询数据

使用SQL操作数据库