Sharedpreference
采用键值对集合来保存数据,也就是说每保存一条数据的时候我们要提供一个对应的键,并且这种方式支持多种数据类型的存储。Sharedpreference
提供了读写的便利方法。
大概有三种方法,分别如下:
Context
抽象类中的getSharedPreferences()
方法- 原型
public abstract SharedPreferences getSharedPreferences (String name, int mode)
第一个参数是SharedPreferences
的文件名称,如果指定名字的文件不存在,当你通过(SharedPreferences.edit())
获取一个editor
时会自动创建。第二个参数是操作模式, 0和MODE_PRIVATE
是同一个默认模式,表示只有当前的应用程序才能读写,另外还有两个操作模式MODE_WORLD_READABLE
,MODE_WORLD_WRITEABLE
在API17被废弃,而MODE_MULTI_PROCESS
在API23被废弃。 - 见官网
- 原型
Activity
类中的getPreferences()
方法- 原型
public SharedPreferences getPreferences (int mode)
,可以看成是简化了的getSharedPreferences()
,只是把当前活动的类名当成SharedPreferences
的文件名称。参数就是操作模式。 - 见官网
- 原型
PreferenceManager
类中的getDefaultSharePreferences()
方法- 原型
public static SharedPreferences getDefaultSharedPreferences (Context context)
参数是一个Context
,static方法,并且自动使用当前应用程序的包名作为前缀来命名SharedPreferences
文件。 - 见官网
- 原型
注:SharedPreferences
文件存放在/data/data/<package name>/shared_prefs
目录下。
为了写shared preferences
文件,需要通过执行edit()创建一个SharedPreferences.Editor
。
通过类似putInt()
与putString()
等方法传递keys
与values
,接着通过commit()
提交改变.
public final static String MESSAGE_NAME = "cn.zhouchaoyuan.firstapplication.MESSAGE";
SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString("package_name",MESSAGE_NAME);
editor.commit();
通过上面的代码,我们运行,可以看到在DDMS
的file explorer
下/data/data/<package name>/shared_prefs
有MainActivity.xml文件,如下:
其中数据以键值对的形式明文存储在xml文件里面,如下:
<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
<string name="package_name">cn.zhouchaoyuan.firstapplication.MESSAGE</string>
</map>
为了从shared preference
中读取数据,可以通过类似于getInt()
及getString(
等方法来读取。在那些方法里面传递我们想要获取的value
对应的key
,并提供一个默认的value
作为查找的key
不存在时函数的返回值。如下:
SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE);
Log.e("zhouchaoyuan",sharedPreferences.getString("package_name","nothing"));
可以看到了logcat
输入了红色的信息:01-17 00:02:46.150 15957-15957/? E/zhouchaoyuan: cn.zhouchaoyuan.firstapplication.MESSAGE
还是见中文教学吧,详细。