1.简介


数据持久化就是指将内存中的瞬时数据保存到存储设备中。
在Android系统中主要提供了三种方式用于简单的实现数据持久化功能。

  • 文件存储
  • SharedPreferences存储
  • SQLite数据库存储

    2.文件存储


1. 写文件

openFileOutput

  1. @Override
  2. public void onDestroy() {
  3. super.onDestroy();
  4. String InputText = edit.getText().toString();
  5. this.save(InputText);
  6. }
  7. public void save(String inputText) {
  8. FileOutputStream out = null;
  9. BufferedWriter writer = null;
  10. try {
  11. out = openFileOutput("data", Context.MODE_PRIVATE);
  12. writer = new BufferedWriter(new OutputStreamWriter(out));
  13. Log.i("ok", "111");
  14. writer.write(inputText);
  15. }catch(IOException e) {
  16. e.printStackTrace();
  17. } finally {
  18. try {
  19. if(writer != null) {
  20. writer.close();
  21. }
  22. }catch(IOException e) {
  23. e.printStackTrace();
  24. }
  25. }
  26. }

2. 读文件

openFileOutput

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

文件存储的方式不适合保存一些较为复杂的文本数据。

学习Android持久化技术遇到的问题

3. SharedPreferences存储


将数据以键值对形式存在文件中(XML文件)。

1. 存数据

  1. saveData.setOnClickListener(new View.OnClickListener() {
  2. @Override
  3. public void onClick(View v) {
  4. SharedPreferences.Editor editor = getSharedPreferences("data", MODE_PRIVATE).edit();
  5. editor.putString("name", "tom");
  6. editor.putInt("age", 28);
  7. editor.putBoolean("married", false);
  8. editor.apply();
  9. }
  10. });

2. 取数据

  1. restoreData.setOnClickListener(new View.OnClickListener() {
  2. @Override
  3. public void onClick(View v) {
  4. SharedPreferences perf = getSharedPreferences("data", MODE_PRIVATE);
  5. String name = perf.getString("name", "");
  6. int age = perf.getInt("age", 0);
  7. boolean married = perf.getBoolean("married", false);
  8. Log.d("MainActivity", "name is " + name);
  9. Log.d("MainActivity", "age is " + age);
  10. Log.d("MainActivity", "married is " + married);
  11. }
  12. });

SharedPreferences存储

4. SQLite数据库存储


SQLiteOpenHelper抽象类
继承类中重写onCreate和onUpgrade方法
执行getReadableDataBase或getWritableDataBase创建数据库,此时重写的onCreate方法会执行
数据库文件位于/data/data//databases/目录下

MyDatabaseHelper.java

  1. package com.example.databasetest;
  2. import android.content.Context;
  3. import android.database.sqlite.SQLiteDatabase;
  4. import android.database.sqlite.SQLiteOpenHelper;
  5. import android.widget.Toast;
  6. public class MyDatabaseHelper extends SQLiteOpenHelper {
  7. public static final String CREARE_BOOK = "create table Book ("
  8. + "id integer primary key autoincrement, "
  9. + "author text, "
  10. + "price real, "
  11. + "pages integer, "
  12. + "name text)";
  13. private Context mContext;
  14. public MyDatabaseHelper(Context context, String name,
  15. SQLiteDatabase.CursorFactory factory, int version) {
  16. super(context, name, factory, version);
  17. mContext = context;
  18. }
  19. @Override
  20. public void onCreate(SQLiteDatabase db) {
  21. db.execSQL(CREARE_BOOK);
  22. Toast.makeText(mContext, "Created successed", Toast.LENGTH_SHORT).show();
  23. }
  24. @Override
  25. public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVsersion) {
  26. }
  27. }

MainActivity.java

  1. package com.example.databasetest;
  2. import androidx.appcompat.app.AppCompatActivity;
  3. import android.os.Bundle;
  4. import android.view.View;
  5. import android.widget.Button;
  6. public class MainActivity extends AppCompatActivity {
  7. private MyDatabaseHelper dbHelper;
  8. @Override
  9. protected void onCreate(Bundle savedInstanceState) {
  10. super.onCreate(savedInstanceState);
  11. setContentView(R.layout.activity_main);
  12. dbHelper = new MyDatabaseHelper(this, "BookStore.db", null, 1);
  13. Button button = findViewById(R.id.create_database);
  14. button.setOnClickListener(new View.OnClickListener() {
  15. @Override
  16. public void onClick(View v) {
  17. // 创建数据库执行onCreate方法
  18. dbHelper.getWritableDatabase();
  19. }
  20. });
  21. }
  22. }

增: db.put
删: db.delete
改:db.update
查: db.query

SQLite数据库存储

5. 使用LitePal操作数据库


todo