1.简介
数据持久化就是指将内存中的瞬时数据保存到存储设备中。
在Android系统中主要提供了三种方式用于简单的实现数据持久化功能。
1. 写文件
openFileOutput
@Override
public 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() {
@Override
public 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() {
@Override
public 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;
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREARE_BOOK);
Toast.makeText(mContext, "Created successed", Toast.LENGTH_SHORT).show();
}
@Override
public 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;
@Override
protected 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() {
@Override
public void onClick(View v) {
// 创建数据库执行onCreate方法
dbHelper.getWritableDatabase();
}
});
}
}
增: db.put
删: db.delete
改:db.update
查: db.query
5. 使用LitePal操作数据库
todo