目录
SharedPreferences是使用键值对(key-value)的形式来存储数据的,存储数据的时候,给数据提供一个key,当读取数据的时候,通过这个key来获取对应的数据。
一、存储数据
使用SharedPreferences存储数据,首先需要得到SharedPreferences对象,方法如下:
1、Context类的getSharedPreferences()方法
@Override
public SharedPreferences getSharedPreferences(String name, int mode) {
return mBase.getSharedPreferences(name, mode);
}
第一个参数是文件名称,生成的文件会自动补充后缀.xml。第二个是模式,MODE_PRIVATE表示私有,即只有当前应用可以对此文件进行读写。创建对象方式如下:
SharedPreferences sharedPreferences = getSharedPreferences("data", MODE_PRIVATE);
生成文件存放在/data/data/包名/shared_prefs路径下:
2、Activity的getPreferences()方法
public SharedPreferences getPreferences(@Context.PreferencesMode int mode) {
return getSharedPreferences(getLocalClassName(), mode);
}
其实这种方法调用的还是Context类的getSharedPreferences()方法,参数只有一个,只需指定模式即可,文件名为当前类名。
创建方式如下:
SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE);
生成的文件自然也会放在/data/data/包名/shared_prefs路径下:
3、PreferenceManager的getDefaultSharedPreferences()方法
public static SharedPreferences getDefaultSharedPreferences(Context context) {
return context.getSharedPreferences(getDefaultSharedPreferencesName(context),
getDefaultSharedPreferencesMode());
}
其实这种方法调用的也是Context类的getSharedPreferences()方法,参数为当前的上下文context,文件名为应用包名+_preferences。模式默认为MODE_PRIVATE。
public static String getDefaultSharedPreferencesName(Context context) {
return context.getPackageName() + "_preferences";
}
private static int getDefaultSharedPreferencesMode() {
return Context.MODE_PRIVATE;
}
创建方式如下:
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
生成的文件也会放在/data/data/包名/shared_prefs路径下:
------------------------------------------------------------------------------
SharedPreferences的对象创建好了,下一步我们要怎么存储呢?这个时候还需要得到SharedPreferences的编辑对象来进行编辑,如下:
SharedPreferences.Editor editor = sharedPreferences.edit();
只有得到Editor对象,我们才能对SharedPreferences文件进操作,如下,我们存入key为name,value为Hello的数据,最后调用apply()方法提交。
editor.putString("name", "Hello");
editor.apply();
操作结果如下:
二、读取数据
读取数据相对于存储数据的操作来说更简单些,使用SharedPreferences对象中的get方法即可读取文件中的数据了。
SharedPreferences sharedPreferences = getSharedPreferences("data", MODE_PRIVATE);
String msg = sharedPreferences.getString("name", "default value");
Log.d(TAG, msg);
打印结果如下: