一. 相关的方法

1.获得SharedPreferences的对象

① Context对象的getSharedPreferences()方法

  • 第一个参数用于指定该文件的名称,名称不用带后缀,后缀会由Android自动加上。
  • 第二个参数指定文件的操作模式,共有四种操作模式。
1
public SharedPreferences getSharedPreferences(String name, int mode)

② Activity对象的getPreferences()方法

  • 参数指定文件的操作模式,共有四种操作模式。
1
public SharedPreferences getPreferences(@Context.PreferencesMode int mode)

③ 两者的区别

  • 调用Context对象的getSharedPreferences()方法获得的SharedPreferences对象可以被同一应用程序下的其他组件共享。
  • 调用Activity对象的getPreferences()方法获得的SharedPreferences对象只能在该Activity中使用。

④ 文件的操作模式

  • Context.MODE_PRIVATE:为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容。
  • Context.MODE_APPEND:模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件。
  • Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE用来控制其他应用是否有权限读写该文件。
  • MODE_WORLD_READABLE:表示当前文件可以被其他应用读取。
  • MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用写入。

2.获取一个Editor对象,用于编辑操作

1
SharedPreferences.Editor edit = sharedPreferences.edit();

3.添加数据

  • 第一个参数是 key,用来获取对应值的标志。
  • 第二个参数是 value,是真正存储的数据。
1
2
3
4
5
6
7
8
9
10
11
//添加某个 key 的数据
Editor putString(String key, @Nullable String value);
Editor putStringSet(String key, @Nullable Set<String> values);
Editor putInt(String key, int value);
Editor putLong(String key, long value);
Editor putFloat(String key, float value);
Editor putBoolean(String key, boolean value);

//提交
boolean commit(); //同步提交 commit是不推荐的,因为它会马上把数据写入永久存储中
void apply(); //异步提交 apply则会在后台(多线程)做这件事

4.获取数据

1
2
3
4
5
6
7
8
9
10
//获取对应 key 的数据
String getString(String key, @Nullable String defValue);
Set<String> getStringSet(String key, @Nullable Set<String> defValues);
int getInt(String key, int defValue);
long getLong(String key, long defValue);
float getFloat(String key, float defValue);
boolean getBoolean(String key, boolean defValue);

//获取所有的数据
Map<String, ?> getAll();

5.其他方法

1
2
3
4
5
6
7
8
//是否包含某一个键
boolean contains(String key);

//移除某一个键
Editor remove(String key);

//清空所有的内容
Editor clear();

二.简单的例子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//SharedPreferences的名字和存储数据的键名
private final String SHARE_NAME = "PictureUnlock";
private final String PASSWORD_KEY = "password";

//读取SharedPreferences存储的数据,首先要获得SharedPreferences的对象
SharedPreferences sharedPreferences = getSharedPreferences(SHARE_NAME, Context.MODE_PRIVATE);

//存储数据需要edit()
SharedPreferences.Editor edit = sharedPreferences.edit();

//存储数据
edit.putString(PASSWORD_KEY, "123456");
//异步提交
edit.apply();

//读取数据
String password = sharedPreferences.getString(PASSWORD_KEY, null);

内部实现的方式其实还是文件(Xml文件),我们可以查看具体的位置:data/data/ 代码包 /shared_prefs/设置的文件名.xml。

参考文章

SharedPreferences详解

SharedPreferences