Android中SharedPreferences使用小记
一、引言
Android中使用SharedPreferences来进行简单数据的持久化处理,从名字就可以了解,其设计目的是为了保存应用程序的一些偏好设置,如音量,主题等信息。其与iOS开发中的NSUserDefault十分类似,并且,他们的实质都是采用XML格式的文件来存储数据。
二、SharedPreferences的简单应用
对数据的持久化操作都会分为两个部分,一部分为存,另一部分为取。首先,开发者在Activity中使用如下方法可以获取获取创建一个SharedPreferences实例:
| 12
 3
 4
 
 | 
 
 SharedPreferences sharedPreferences = getSharedPreferences("MyPreference",MODE_PRIVATE);
 
 | 
在getSharedPreference()方法中第一个参数决定这个存储文件的名字,在获取SharedPreferences实例时,如果系统创建过这个文件,则会返回本地的原文件,如果没有这个文件,则会进行创建。第二个参数决定这个文件的访问权限,可选参数如下:
| 12
 3
 
 | Activity.MODE_PRIVATE,//默认操作模式,代表该文件是私有数据,只能被应用本身访问Activity.MODE_WORLD_READABLE,//表示当前文件可以被其他应用读取,
 Activity.MODE_WORLD_WRITEABLE,//表示当前文件可以被其他应用写入;
 
 | 
有了SharedPreferences实例,在需要进行数据存储时,需要获取到SharedPreferences实例中的Editor对象,SharedPreferences类中有一个Editor的内部接口,其中提供了存储数据的相关方法,示例代码如下:
| 12
 3
 4
 5
 6
 
 | SharedPreferences.Editor editor = sharedPreferences.edit();
 
 editor.putString("password","123456");
 
 editor.commit();
 
 | 
Editor采用键值对的存储方式,可以存储的数据即常用方法如下:
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 
 | public interface Editor {
 SharedPreferences.Editor putString(String var1, String var2);
 
 SharedPreferences.Editor putStringSet(String var1, Set<String> var2);
 
 SharedPreferences.Editor putInt(String var1, int var2);
 
 SharedPreferences.Editor putLong(String var1, long var2);
 
 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实例的如下方法:
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 
 | 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中数据改变时,会通知给开发者进行逻辑处理,示例代码如下:
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 
 | final SharedPreferences.OnSharedPreferenceChangeListener listener = new SharedPreferences.OnSharedPreferenceChangeListener() {
 
 @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