保存到Preference
当有一个相对较小的key-value集合需要保存时,可以使用SharedPreferences APIs。
SharedPreferences 对象指向一个保存key-value pairs的文件,并为读写他们提供了简单的方法。
每个 SharedPreferences 文件均由framework管理,其既可以是私有的,也可以是共享的。
获取SharedPreference
我们可以通过以下两种方法之一创建或者访问shared preference 文件:
- getSharedPreferences() — 如果需要多个通过名称参数来区分的shared preference文件, 名称可以通过第一个参数来指定。可在app中通过任何一个Context 执行该方法。
getPreferences() — 当activity仅需要一个shared preference文件时。因为该方法会检索activity下默认的shared preference文件,并不需要提供文件名称。
getPreferences()使用当前activity的getLocalClassName()作为默认名称,即activity的名称。(例如MainActivity)
SharedPreferences sharedPref = getPreferences(Context.MODE_PRIVATE);
四种MODE
在 Android系统提供的API中, 获取 Preferences对象有四种类型,分别如下:
文件创建模式:Activity.MODE_APPEND
如果该文件已经存在,然后将数据写入,而不是抹掉它现有文件的末尾。
文件创建模式:MODE_PRIVATE
默认模式,在那里创建的文件只能由应用程序调用,即为私有的
文件创建模式:Activity.MODE_WORLD_READABLE
允许所有其他应用程序有读取和创建文件的权限。
文件创建模式:Activity.MODE_WORLD_WRITEABLE
允许所有其他应用程序具有写入、访问和创建的文件权限。
写Shared Preference
为了写shared preferences文件,需要通过执行edit()创建一个 SharedPreferences.Editor。
通过类似putInt()与putString()等方法传递keys与values,接着通过commit() 提交改变.
SharedPreferences.Editor editor = sharedPref.edit();
int newHighScore = 59;
editor.putInt(key, newHighScore);
editor.apply(); // as会提示, commit() 更换为 apply()
读Shared Preference
为了从shared preference中读取数据,可以通过类似于 getInt() 及 getString()等方法来读取。在那些方法里面传递我们想要获取的value对应的key,并提供一个默认的value作为查找的key不存在时函数的返回值。如下:
long highScore = sharedPref.getInt(key, 0);
Log.d(TAG, "onCreate: " + b + " " + highScore);
工具类介绍
tray
1424星
https://github.com/grandcentrix/tray
// 创建一个 preference 访问. 这是全局的 preferences.
final AppPreferences appPreferences = new AppPreferences(getContext());
// 保存一个key value
appPreferences.put("key", "lorem ipsum");
// 根据key 读取value. key不存在使用第二个参数
final String value = appPreferences.getString("key", "default");
Log.v(TAG, "value: " + value);
// 读取key 不存在的. 返回默认值
final String defaultValue = appPreferences.getString("key2", "default");
Log.v(TAG, "value: " + defaultValue); // value: default
gradle
dependencies {
compile 'net.grandcentrix.tray:tray:0.12.0'
}
EasySP
63星
https://github.com/WhiteDG/EasySP
- 保存数据到sharedpreferences
EasySP.init(context).putBoolean("boolean", true);
//可以使用字符串资源作为保存的键
EasySP.init(context).putBoolean(R.string.key_bool, true);
//可以自定义sharedpreferences的文件名
EasySP.init(context,"Custom").putBoolean("boolean", true);
- 一句代码保存多条数据(链式调用)
EasySP.init(context)
.putBoolean(R.string.key_bool, true)
.putInt(R.string.key_int, 1)
.putString(R.string.key_string, "string")
.putLong(R.string.key_long, 1000000000)
.putFloat(R.string.key_float, 1.1f)
.put("put", 100)
.putStringSet(R.string.key_set, strings);
- 读取数据
boolean booleanData = EasySP.init(context).getBoolean("bool");
boolean booleanData = EasySP.init(context).getBoolean(R.string.key_bool,defValue);
- 移除某个键对应的数据
EasySP.init(context).remove("bool");
EasySP.init(context).remove(R.string.key_bool);
- 清除所有数据
EasySP.init(context).clear();
gradle
dependencies {
compile 'com.white:easysp:1.0.0'
}
参考文章
http://hukai.me/android-training-course-in-chinese/basics/data-storage/shared-preference.html
http://www.cnblogs.com/TerryBlog/archive/2010/06/18/1760598.html
https://github.com/grandcentrix/tray
https://github.com/WhiteDG/EasySP/blob/master/README_ZH.md