在所有应用程序中,都必然涉及数据的交互。有些时候,应用程序有少量的数据需要保存,并且这些数据的格式很简单。比如:软件设置、用户账户设置,用户习惯设置等,这个时候就可以用到SharedPreferences。
因为SharedPreferences本身是一个接口,程序无法直接创建SharedPreferences的实例,只能通过Context提供的getSharedPreferences(String name,int mode)方法来获取SharedPreferences的实例。
public abstract SharedPreferences getSharedPreferences(String name,int mode)
第一个参数name为创建的文件名称,如设定了name为"SilverDemo",则生成的文件名为:SilverDemo.xml。
第二个参数mode为int类型,此参数描述了创建的文件的可见性。有如下值:
MODE_PRIVATE:指定此SharedPreferences只有本程序可以访问。
MODE_WORLD_READABLE:指定此SharedPreferences对其他程序只读且无法修改。
MODE_WORLD_WRITEABLE:指定此SharedPreferences能被其他程序读写。
MODE_MULTI_PROCESS:Android2.3之后已经弃之不用了。
SharedPreferences保存的数据主要是类似于配置信息格式的数据,因此它保存的数据主要是简单类型的Key-value对。并且Value部分只能是一些基本数据类型:boolean、float、int、long、String等。
SharedPreferences的常用方法:
boolean contains(String Key):判断SharedPreferences是否包含特定Key的数据。
abstract Map<String,?> getAll():获取SharedPreferences数据里全部的Key-Value对。
boolean getXxx(String key,Xxx defValue):获取SharedPreferences数据里指定Key对应的value。如果该Key不存在,返回默认值defValue。
SharedPreferences本身为接口类型,并没有提供写入数据的能力,而是通过SharedPreferences的内部接口实现写入数据的能力。调用edit()方法即可获取它所对应的Editor对象。
SharedPreferences.Editor的常用方法:
abstract SharedPreferences.Editor clear():清空SharedPreferences里所有的数据。
abstract SharedPreferences.Editor putXxx(String key,xxx value):向SharedPreferences中插入指定的Key-Value对。
abstract SharedPreferences.Editor remove(String key):从SharedPreferences中移除指定Key的数据。
boolean commit():当Editor编辑完成后,调用该方法提交修改。
示例,简单使用SharedPreferences实现存储,页面仅存在两个Button控件,此处不附布局详情。
<a></a>
创建的文件总是保存在根目录的data/data/<package name>/shared_prefs目录下。可以使用File Explorer工具查看,此工具在Eclipse→windows→Show view→other,打开Show View窗口,选中File Explorer。

如图所示,把此文件导出到PC上,可以看到xml文件中的内容为:
<code><?xml version=</code><code>'1.0'</code> <code>encoding=</code><code>'utf-8'</code> <code>standalone=</code><code>'yes'</code> <code>?></code>
<code><map></code>
<code><</code><code>int</code> <code>name=</code><code>"random"</code> <code>value=</code><code>"83"</code> <code>/></code>
<code><string name=</code><code>"time"</code><code>></code><code>2013</code><code>年</code><code>3</code><code>月</code><code>4</code><code>日</code><code>12</code><code>:</code><code>19</code><code>:</code><code>38</code><code></string></code>
<code></map></code>
在创建一个SharedPreferences的时候,如果需要让别的应用程序也能访问到本程序的SharedPreferences,则在创建的时候指定MODE_WORLD_READABLE或MODE_WORLD_WRITEABLE就可以了。在其他程序访问的时候,只要能获取到创建的程序的Context就可以访问了。
具体步骤:
需要创建其他程序对应的Context。使用Context.createPackageContext(String packageName, int flags)。
调用其他应用程序的Context的getSharedPerferences(String name,int mode)即可获取相应的SharedPreferences对象。
其他操作与操作本程序的SharedPreferences一致。
Context.createPackageContext(String packageName, int flags):根据包的名称,返回此包的Context。通过flags控制安全性:可选值:CONTEXT_INCLUDE_CODE 或 CONTEXT_IGNORE_SECURITY(常用).
实际上,开发者完全可以使用IO流的方式访问xml文件,但是此方法过于繁琐,没有直接使用SharedPreferences来的简洁明了。
本文转自承香墨影博客园博客,原文链接:http://www.cnblogs.com/plokmju/archive/2013/03/14/2960365.html,如需转载请自行联系原作者