Android开发

Android入门总结-数据持久化

2017-03-11  本文已影响542人  克罗地亚催眠曲

最近看了一下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();开启事务,事务执行成功; 结束事务。若抛出异常,事务自动失败。

上一篇 下一篇

猜你喜欢

热点阅读