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(); } }