SharePreference应用

在App中,需要暂时存储的,我们可以利用SharePreference,我们把存储的轻量级数据,例如一个字符串,一个数字,写入shared preferences。当我们需要数据,再从中读取

何为 sharedPreference

shared preferences本质上就是文件系统中的文件,可使用SharedPreferences类读写它。
SharedPreferences实例用起来更像一个键值对仓库(类似于Bundle),但它可以通过持久化存储保存数据。(也就意味着应用关闭之后仍然有效)键值对中的键为字符串,而值是原子数据类型。进一步查看shared preferences文件可知,它们实际上是一种简单的 XML 文件,但SharedPreferences类已屏蔽了读写文件的实现细节。shared preferences文件保存在应用沙盒中,所以,不应用它保存类似密码这样的敏感信息。

XML文件格式
XML文件格式

使用

请看下面代码

1
2
3
4
5
6
7
8
9
10
11
12
13
public class QueryPreferences {
private static final String PREF_SEARCH_QUERY = "searchQuery";
public static String getStoredQuery(Context context){
return PreferenceManager.getDefaultSharedPreferences(context)
.getString(PREF_SEARCH_QUERY, null);
}
public static void setStoredQuery(Context context, String query){
PreferenceManager.getDefaultSharedPreferences(context)
.edit()
.putString(PREF_SEARCH_QUERY, query)
.apply();
}
}

QueryPreference 类中,我们定义了两个方法,分别用来存储信息和取出信息。由于我们存储的键值对只有一种,且维持一个,所以我们在类的一开始把 Key 固定。
值得注意的是,我们要传递上下文信息 Context ,只有找到自己 context对应的 SharedPrefernce 才可以找到与之对应的键值对。

需要补充的是,现在android原生库中的sharedPreference被官方标注为不推荐使用。具体原因其实是 扩展库中的 sharedPreference 支持更多的存储类型,可以看一下 Google 开发者在18年11月发布的一段新特性视频其中介绍了关于扩展库中 sharedPreference 的特性。
我们选择 sharedPreference 时,引进扩展库 androidx 即可,函数逻辑基本一致

引进库代码:

java implementation "androidx.preference:preference:1.1.0" `

在build.gradle