1.简介
数据持久化就是指将内存中的瞬时数据保存到存储设备中。
在Android系统中主要提供了三种方式用于简单的实现数据持久化功能。
1. 写文件
openFileOutput
@Overridepublic void onDestroy() {super.onDestroy();String InputText = edit.getText().toString();this.save(InputText);}public void save(String inputText) {FileOutputStream out = null;BufferedWriter writer = null;try {out = openFileOutput("data", Context.MODE_PRIVATE);writer = new BufferedWriter(new OutputStreamWriter(out));Log.i("ok", "111");writer.write(inputText);}catch(IOException e) {e.printStackTrace();} finally {try {if(writer != null) {writer.close();}}catch(IOException e) {e.printStackTrace();}}}
2. 读文件
openFileOutput
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();}}}Log.i("info", content.toString());return content.toString();}
文件存储的方式不适合保存一些较为复杂的文本数据。
3. SharedPreferences存储
1. 存数据
saveData.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {SharedPreferences.Editor editor = getSharedPreferences("data", MODE_PRIVATE).edit();editor.putString("name", "tom");editor.putInt("age", 28);editor.putBoolean("married", false);editor.apply();}});
2. 取数据
restoreData.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {SharedPreferences perf = getSharedPreferences("data", MODE_PRIVATE);String name = perf.getString("name", "");int age = perf.getInt("age", 0);boolean married = perf.getBoolean("married", false);Log.d("MainActivity", "name is " + name);Log.d("MainActivity", "age is " + age);Log.d("MainActivity", "married is " + married);}});
4. SQLite数据库存储
SQLiteOpenHelper抽象类
继承类中重写onCreate和onUpgrade方法
执行getReadableDataBase或getWritableDataBase创建数据库,此时重写的onCreate方法会执行
数据库文件位于/data/data/
MyDatabaseHelper.java
package com.example.databasetest;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;import android.widget.Toast;public class MyDatabaseHelper extends SQLiteOpenHelper {public static final String CREARE_BOOK = "create table Book ("+ "id integer primary key autoincrement, "+ "author text, "+ "price real, "+ "pages integer, "+ "name text)";private Context mContext;public MyDatabaseHelper(Context context, String name,SQLiteDatabase.CursorFactory factory, int version) {super(context, name, factory, version);mContext = context;}@Overridepublic void onCreate(SQLiteDatabase db) {db.execSQL(CREARE_BOOK);Toast.makeText(mContext, "Created successed", Toast.LENGTH_SHORT).show();}@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVsersion) {}}
MainActivity.java
package com.example.databasetest;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.Button;public class MainActivity extends AppCompatActivity {private MyDatabaseHelper dbHelper;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);dbHelper = new MyDatabaseHelper(this, "BookStore.db", null, 1);Button button = findViewById(R.id.create_database);button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// 创建数据库执行onCreate方法dbHelper.getWritableDatabase();}});}}
增: db.put
删: db.delete
改:db.update
查: db.query
5. 使用LitePal操作数据库
todo
