持久化存储技术之SharedPreferences存储

SharedPreferences是使用键值对的方式来存储数据的。这样在读取数据的时候就可以通过这个键把对应的值取出来。

优点:SharedPreferences是很轻量级的应用,使用起来也很方便、简洁。

缺点:存储数据类型比较单一(只有基本数据类型以及字符串),无法进行条件查询,只能在不复杂的存储需求下使用,比如保存配置信息等。

存储路径:/data/data/包名/shared_prefs 目录下

一、将数据存储到SharedPreferences中

1.首先需要获取到SharedPreferences对象

Android中提供了三种方法获取该对象(一般用第一种就可以了)

(1)Context类中的getSharedPreferences()

此方法中接收两个参数,第一个参数用于指定SharedPreferences文件名称,如果指定的文件不存在则会创建一个。第二个参数用于指定操作模式,主要有两种模式供选择,MODE_PRIVATE仍然是默认的操作,表示只有当前应用程序才可以对这个SharedPreferences文件进行读写;MODE_MULTI_PROCESS则一般是用于会有多个进程中对同一个SharedPreferences文件进行读写的情况。

(2)Activity类中的getPreferences()方法

(3)PreferenceManager类中的getDefaultSharedPreferences()方法

2.调用SharedPreferences对象的edit()方法来获取一个SharedPreferences.Editor对象

3.向SharedPreferences.Editor对象中添加数据

4.调用commit()方法将添加的数据提交,从而完成数据的存储操作

private void saveDatasBySp() {
    //获取到SharedPreferences对象
    SharedPreferences sp = getSharedPreferences("config",MODE_PRIVATE);
    //获取到SharedPreferences.Editor对象
    SharedPreferences.Editor edit = sp.edit();
    //SharedPreferences.Editor对象中添加数据
    edit.putString("name","xiaoming");
    //提交数据
    edit.commit();
}
二、从 SharedPreferences中读取数据

1.和保存值的方式一样获取SharedPreferences对象

2.通过get()方法对存储的值进行读取

get()方法中接收两个参数,第一个参数是键,传入存储数据时使用的键就可以得到相应的值;第二个参数是默认值,即表示当出入的键找不到对应的值时,会以什么样的默认值进行返回。

public String getDatasBySp() {
    //获取到SharedPreferences对象
    SharedPreferences sp = getSharedPreferences("config",MODE_PRIVATE);
    //通过键找值,默认返回空字符串
    String name = sp.getString("name", "");
    return name;
}
三、为了使用方便,我们一般会封装一个工具类

public class PrefUtils {
    public static final String PREF_NAME = "config";

    public static void putBoolean(Context ctx, String key, boolean value) {
        SharedPreferences sp = ctx.getSharedPreferences(PREF_NAME,
                Context.MODE_PRIVATE);
        sp.edit().putBoolean(key, value).commit();
    }

    public static boolean getBoolean(Context ctx, String key, boolean defValue) {
        SharedPreferences sp = ctx.getSharedPreferences(PREF_NAME,
                Context.MODE_PRIVATE);
        return sp.getBoolean(key, defValue);
    }

    public static void putString(Context ctx, String key, String value) {
        SharedPreferences sp = ctx.getSharedPreferences(PREF_NAME,
                Context.MODE_PRIVATE);
        sp.edit().putString(key, value).commit();
    }

    public static String getString(Context ctx, String key, String defValue) {
        SharedPreferences sp = ctx.getSharedPreferences(PREF_NAME,
                Context.MODE_PRIVATE);
        return sp.getString(key, defValue);
    }

    public static void putInt(Context ctx, String key, int value) {
        SharedPreferences sp = ctx.getSharedPreferences(PREF_NAME,
                Context.MODE_PRIVATE);
        sp.edit().putInt(key, value).commit();
    }

    public static int getInt(Context ctx, String key, int defValue) {
        SharedPreferences sp = ctx.getSharedPreferences(PREF_NAME,
                Context.MODE_PRIVATE);
        return sp.getInt(key, defValue);
    }

    //删除某个key
    public static void remove(Context ctx, String key) {
        SharedPreferences sp = ctx.getSharedPreferences(PREF_NAME,
                Context.MODE_PRIVATE);
        sp.edit().remove(key).commit();
    }
}

你可能感兴趣的:(Android)