Skip to content

数据持久化

文件操作模式

  • Context.MODE_PRIVATE:私有
  • Context.MODE_APPEND:追加

SharedPreferences

接口类,用键值对的方式存放数据,以xml格式存在设备的/data/data/包名/shared_prefs/下。

允许存储六种数据类型:int、long、float、boolean、String和Set \<String>

获取对象

SharedPerferences sp = this.getSharedPreferences("文件名",模式)

文件名不带后缀,this是Activity上下文对象,如果不在Activity内调用需要手动获取

模式只能用私有。

写入对象

  • 获取编辑器对象

    SharedPrefences.Editor editor =sp.edit();
    
  • editor.putXxx("参数名",参数值);
    
  • 提交

    1
    2
    3
    editor.apply();    //异步,推荐使用
    //or
    editor.commit();   //同步
    

读对象

Xxx obj =sp.getXxx("参数名",默认返回值);

移除对象

  • 获取编辑器对象

    SharedPrefencesEditor editor =sp.edit();
    
  • 移除

    editor.remove("参数名");
    
  • 提交

    同写入

文件存储

分为内部存储和外部存储。

内部存储

手机内存,仅能被应用程序自身访问,位于/data/data/包名/file/

  • 相关方法需要对可能的FileNotFoundException异常和IOException异常进行异常处理

    1
    2
    3
    4
    FileOutputStream fos=openFileOutput("文件名称",模式)     
    fos.write(写入的字符串.getBytes());
    fos.flush();      //从缓存写入
    fos.close();      //关闭输出流对象
    
  • 异常处理同上

    1
    2
    3
    4
    FileInputStream fis=openFileInput("文件名");
    bytes[] content =new bytes[fis.available()];
    fis.read(content);  
    fis.close();          
    

外部存储

SD卡类似的存储介质,位于

  • 开启SD卡权限

SQLite数据库存储

轻量级关系数据库,支持NULL、REAL(浮点数)、INTEGER(整数)、TEXT(字符串文本)和BLOB(二进制对象),存储在后缀为db的文件里,路径为/data/data/包名/database/目录下

创建数据库

  • 自定义继承SQLiteOpenHelper的类
  • 重写构造方法

    1
    2
    3
    4
    5
    class classname extent SQLiteOpenHelper{
        public classname(Context){
            super(context,"databaseName.db",null,版本号)
        }
    }
    
  • 重写onCreate方法

    @Override
    public onCreate()
    
  • 重写Upgrade()方法

    在数据库存在且版本号发生变化后调用

  • 在Activity中实例化自定义类

    1
    2
    3
    4
    classname obj =new classname(context);
    SQLiteDatabase db1=obj.getWritableDatabase();    // 可读写
    //or
    SQLiteDatabase db1=obj.getReadableDatabase();    // 可读
    

数据库的增删查改

  • 在Activity中实例化类