Android中使用SharedPreferences来进行简单数据的持久化处理,从名字就能够了解,其设计目的是为了保存应用程序的一些偏好设置,如音量,主题等信息。其与iOS开发中的NSUserDefault十分相似,而且,他们的实质都是采用XML格式的文件来存储数据。java
对数据的持久化操做都会分为两个部分,一部分为存,另外一部分为取。首先,开发者在Activity中使用以下方法能够获取获取建立一个SharedPreferences实例:app
/* 这个方法须要传入两个参数,第一个参数为文件名,第二个参数为文件模式 */ SharedPreferences sharedPreferences = getSharedPreferences("MyPreference",MODE_PRIVATE);
在getSharedPreference()方法中第一个参数决定这个存储文件的名字,在获取SharedPreferences实例时,若是系统建立过这个文件,则会返回本地的原文件,若是没有这个文件,则会进行建立。第二个参数决定这个文件的访问权限,可选参数以下:异步
Activity.MODE_PRIVATE,//默认操做模式,表明该文件是私有数据,只能被应用自己访问 Activity.MODE_WORLD_READABLE,//表示当前文件能够被其余应用读取, Activity.MODE_WORLD_WRITEABLE,//表示当前文件能够被其余应用写入;
有了SharedPreferences实例,在须要进行数据存储时,须要获取到SharedPreferences实例中的Editor对象,SharedPreferences类中有一个Editor的内部接口,其中提供了存储数据的相关方法,示例代码以下:ide
//获取Editor对象 SharedPreferences.Editor editor = sharedPreferences.edit(); //进行字符串存储 editor.putString("password","123456"); //提交存储内容 editor.commit();
Editor采用键值对的存储方式,能够存储的数据即经常使用方法以下:spa
public interface Editor { //进行字符串数据存储 SharedPreferences.Editor putString(String var1, String var2); //进行字符Set存储 SharedPreferences.Editor putStringSet(String var1, Set<String> var2); //进行Int值存储 SharedPreferences.Editor putInt(String var1, int var2); //进行Long值存储 SharedPreferences.Editor putLong(String var1, long var2); //进行Float值存储 SharedPreferences.Editor putFloat(String var1, float var2); //进行布尔值存储 SharedPreferences.Editor putBoolean(String var1, boolean var2); //删除一个键 与其对应的值 SharedPreferences.Editor remove(String var1); //清空全部数据 SharedPreferences.Editor clear(); //提交存储 boolean commit(); //提交存储请求 void apply(); }
上面的方法中,有两点须要注意,首先clear()方法是将全部的键的值清空,并无删除键,而remove是删除键和值。第二点,commit()方法和apply()方法都用于提交数据,不一样的是,commit()方法会直接将数据同步到磁盘,返回值会告知开发者是否同步成功,而apply()方法只是将数据存储在内存,以后异步进行存盘操做,没有返回值,在开发中,若是要保证数据立马存入磁盘,要使用commit()方法。设计
对存储的数据进行读取,能够直接调用SharedPreferences实例的以下方法:code
public interface SharedPreferences { //获取全部键值映射表 Map<String, ?> getAll(); //经过键获取字符串值 第一个参数为键 第二个参数为此键不存在时使用的默认值 String getString(String var1, String var2); //经过键获取字符串值集合 第一个参数为键 第二个参数为此键不存在时使用的默认值 Set<String> getStringSet(String var1, Set<String> var2); //经过键获取整形值 第一个参数为键 第二个参数为此键不存在时使用的默认值 int getInt(String var1, int var2); //经过键获取长整形值 第一个参数为键 第二个参数为此键不存在时使用的默认值 long getLong(String var1, long var2); //经过键获取浮点值 第一个参数为键 第二个参数为此键不存在时使用的默认值 float getFloat(String var1, float var2); //经过键获取布尔值 第一个参数为键 第二个参数为此键不存在时使用的默认值 boolean getBoolean(String var1, boolean var2); //检查文件中是否包含某个键 boolean contains(String var1); //注册监听 void registerOnSharedPreferenceChangeListener(SharedPreferences.OnSharedPreferenceChangeListener var1); //取消注册监听 void unregisterOnSharedPreferenceChangeListener(SharedPreferences.OnSharedPreferenceChangeListener var1); public interface OnSharedPreferenceChangeListener { void onSharedPreferenceChanged(SharedPreferences var1, String var2); } }
注册监听方法能够提供给开发者一个回调接口,当SharedPreferences中数据改变时,会通知给开发者进行逻辑处理,示例代码以下:对象
//建立监听者 final SharedPreferences.OnSharedPreferenceChangeListener listener = new SharedPreferences.OnSharedPreferenceChangeListener() { //须要重写这个方法 这个方法中会传入发生变化的键s @Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String s) { Log.d("**********",s); } }; //进行注册 sharedPreferences.registerOnSharedPreferenceChangeListener(listener);
舒适提示:能够在Android Device Monitor中查看建立的SharedPreferences文件,路径为data/data/APP包名/shared_prefs目录下,能够看到其为XML文件,以下图:接口
专一技术,热爱生活,交流技术,也作朋友。内存
——珲少 QQ群:435043639