Android入门总结-数据持久化
最近看了一下Android,只看书不总结一下,总感觉东西并没有放在脑子里,人过留名,雁过留声,遂写下这篇总结。
书本看的是《Android编程兵书》,但这篇总结的大纲是按照《第一行代码》的章节目录撰写的。两本书的内容结构大致相同,Android入门的话只看其中一本就够了。
数据持久化就是将内存中的瞬时数据保存到存储设备中。Android提供了三种方式:文件存储、SharedPreference、数据库。
文件存储:不对存储的内容进行格式化处理,适合简单的文本数据或二进制数据。
openFileOutput()
函数第一个参数是文件名称(不能包含路径,默认存储到/data/data/<packagename/files>)
,第二个参数是文件操作模式,MODE_PRIVATE是默认模式,会覆盖原文件内容, MODE_APPEND若文件已存在就往其中追加内容,不存在就创建文件。(MODE_WORLD_READABLE 和 MODE_WORLD_WRITEABLE 易引起漏洞,在Android 4.2版本中被废弃)。该函数返回一个FileOutputStream对象。
写文件代码示例
pubic void save(){
String data = "Data to save";
FileOutputStream out = null;
BufferedWriter writer = null;
try{
out = openFileOutput("data", Context.MODE_PRIVATE);
writer = new BufferedWriter(new OutputStream(out));
writer.write(data);
}catch(IOException e){
e.printStackTrace();
}finally{
try{
if(writer != null){
writer.close();
}
}catch(IOException e){
e.printStackTrace();
}
}
}
读文件代码示例
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();
}
}
}
}
}
SharedPreferences存储:通过键值对的方式存储数据
获得SharedPreferences对象
Context类的getSharedPreferences()接收两个参数:文件名称,操作模式。SharedPreferences文件存放在/data/data/<packagename>/shared_prefs/目录。MODE_PRIVATE模式表示只有当前的应用程序才可以对这个文件读写。MODE_MULTI_PROCESS用于多个进程对一个文件读写。(MODE_WORLD_READABLE和MODE_WORLD_WRITEABLE在4.2版本中被废弃)
Activity类的getPreferences()方法:使用当前活动的类名作为文件名
PreferenceManager类的getDefaultSharedPreferences():静态方法,接收Context参数,使用应用程序包名作为前缀来命名SharedPreferences文件
使用示例
// 某Activity的onCreate()方法中
SharedPreferences.Editor editor = getSharedPreferences("data", MODE_PRIVATE).edit();
editor.putString("name", "Tom");
editor.putInt("age", 28);
editor.putBoolean("married", false);
editor.commit();
SharePreferences文件使用XML格式管理数据
从SharePreferences读数据
SharedPreferences pref = getSharedPreferences("data", MODE_PRIVATE);
String name = pref.getString("name", "");
int age = pref.getInt("age", 0);
boolean married = pref.getBoolean("married", false);
Log.d("MainActivity", "name is " + name);
SQLite:文件存储和SharedPreferences存储只适用于保存一些简单的数据。SQLiteHelper帮助类有两个抽象方法:onCreate() onUpgrade(),需重写该方法。两个重要的实例方法getReadableDatabase() getWritableDatabase()
adb是Android SDK自带的一个调试工具。
查看数据库实例
adb shell
sqlite3 BookStore.db
.table // 查看有哪些表
.schema // 查看创建表的语句
升级数据库:直接创建表会无反应,需升级数据库
查询数据库:query()方法的参数:table, columns, selection, selectionArgs, groupBy, having, orderBy
db.rawQuery("select * from Book", null)
Cursor cursor = db.query("Book", null, null, null, null, null, null);
if(cursor.moveToFirst()){
do{
String name = cursor.getString(cursor.getColumnIndex("name"));
}while(cursor.moveToNext());
}
cursor.close();
使用事务:db.beginTransactioni(); sb.setTransactionSuccessful(); sb.endTransaction();开启事务,事务执行成功; 结束事务。若抛出异常,事务自动失败。