数据持久化

Android持久化方式主要有三种:文件存储、SharePreference存储以及数据库存储。

文件储存

比较适合存储一些简单的文本数据以及二进制数据。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
    @Override
protected void onDestroy() {
super.onDestroy();
String data = editText.getText().toString();
FileOutputStream out = null;
BufferedWriter writer = null;
try {
//MODE_APPEND是往文件里附加数据,MODE_PRIVATE是覆盖之前的数据
out = openFileOutput("mydata", Context.MODE_APPEND);
writer = new BufferedWriter(new OutputStreamWriter(out));
writer.write(data);
writer.flush();
// Log.d("destory",out.)
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (writer != null) {
writer.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}

查看保存的数据:http://t.csdn.cn/c4EkS

SharedPreferences存储

使用键值对进行储存。存入时是什么数据类型,取出就是什么数据类型。

1
2
3
SharedPreferences.Editor edit = getSharedPreferences("mydata", MODE_PRIVATE).edit();
edit.putString("tempStr",str);
edit.commit();

Sqlite

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public class MyDatabaseHelper extends SQLiteOpenHelper {
public static final String CREATE_BOOK = "create table mybooks (\n" +
"id integer primary key autoincrement,\n" +
"author text,\n" +
"price real,\n" +
"pages integer,\n" +
"name text);";

private Context context;
public MyDatabaseHelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
this.context = context;
}

@Override
public void onCreate(SQLiteDatabase db) {
db.beginTransaction();
db.execSQL(CREATE_BOOK);
Toast.makeText(context,"Create Books Successed",Toast.LENGTH_SHORT).show();
}


// 当构造函数中的版本号更新之后就会调用本函数
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

}
}

1. 使用ContentValues插入

1
2
3
4
5
6
7
8
db.beginTransaction(); // 手动设置开始事务
for (ContentValues v : list) {
db.insert("bus_line_station", null, v);
}
db.setTransactionSuccessful(); // 设置事务处理成功,不设置会自动回滚不提交
db.endTransaction(); // 处理完成

db.close();