Android 中的数据持久化

   

目录

1.文件存储

2.SharePreferences存储

3.数据库存储


数据持久化是将内存中的顺势数据保存下来。

Android中的持久化技术一般来讲有三种:文件存储、SharePreferences存储以及数据库存储。

1.文件存储

文件存储不对存储内容做任何的格式化处理,所有数据都是原封不动的保存到文件中。因而比较适合存储简单的文本数据或者二进制数据,如果想要存储复杂的文本数据,就需要定义一套合适规范,方便解析。

如何将数据存储到文件中。Context类中提供了openFileOutput(String name, int mode)

       name是文件名,不包括路径,文件存储的路径默认为/data/data/<package name>/files/的目录下。

mode操作模式,

MODE_PRIVATE:默认模式,覆盖源文件,

MODE_APPEND:在已存在文件中追加,不存在文件则新建。

     代码示例:

public void save(){
    String data = "data to save";
    FileOutputStream out =null;
    BufferedWriter writer = null;
    try {
        out = openFileOutput("data", Context.MODE_PRIVATE);
        writer = new BufferedWriter(new OutputStreamWriter(out));
        writer.write(data);
    }catch (IOException e){
        e.printStackTrace();
    }finally {
        try{
            if(writer != null){
                writer.close();
            }
        }catch (IOException e){
            e.printStackTrace();
        }
    }
}

通过openFileOutput()得到FileOutputStream对象,然后通过FileOutputStream对象得到OutputStreamWriter,进而构建一个BufferedWriter将String类型的变量写进文件。

文件中读取数据。用到类似的openFileInput(String name),只有一个文件名的参数。

代码示例:

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();
            }
        }
    }
    return content.toString();
}

 

2.SharePreferences存储

SharePreferences按照key:value存储,也就是存储的数据需要给他一个键值,我们还可以通过键值将它取出,数据类型不会变化。

将数据存储到SharePreferences中。先得到SharedPreferencesd对象,下面有三种方法。

  1. Context类中getSharedPreferences(String name,int mode)方法。name是文件名,SharePreferences文件都是存放在/data/data/<package name>/shared_prefs/目录下,mode操作模式,目前只有MODE_PRIVATE一种可以选,和传入0效果相同。表示只有当前应用可以读写。
  2. Activity 类中的getSharedPreferences(int mode)方法,没了name,因为这个方法自动将类的名字作为文件名。
  3. PreferenceManager类中的getDefaultPreferences()

public static SharedPreferences getDefaultSharedPreferences(Context context) {
    return context.getSharedPreferences(getDefaultSharedPreferencesName(context),
            getDefaultSharedPreferencesMode());
}

这是一个静态方法,接受一个context,并且自动使用当前程序包名作为前缀来命名SharedPreferences文件。

得到了SharedPreferences对象后,就可以进行数据存储了,主要分为3步。

  1. 调用SharedPreferences.edit(),获取SharedPreferences.Editor对象。
  2. 调用Editor.putXXX方法添加数据。例如加入String类型的数据。Editor.putString(“name”,”xiaojili”);
  3. 调用apply(),提交数据。

代码示例:

SharedPreferences.Editor editor = getSharedPreferences("data",0).edit();
editor.putBoolean("boolean",true);
editor.putString("name","xiaojili");
editor.apply();

SharedPreferences文件是一个XML

读取SharedPreferences中的数据。

这个就比较简单了,先获取SharedPreferences对象然后getXXX,上代码:

SharedPreferences sharedPreferences = getSharedPreferences("data",0);
String name = savedInstanceState.getString("name","");

我们获取data文件中,key为name的值,如果不存在key值,name赋值””。

3.数据库存储

   东西太多明天再写

 

    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值