Android--使用SharedPreferences

简介:

在所有应用程序中,都必然涉及数据的交互。有些时候,应用程序有少量的数据需要保存,并且这些数据的格式很简单。比如:软件设置、用户账户设置,用户习惯设置等,这个时候就可以用到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控件,此处不附布局详情。

复制代码
public class Main extends Activity {
    
    Button btnWriter,btnReader;
    SharedPreferences pre;
    SharedPreferences.Editor editor;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        btnWriter=(Button)this.findViewById(R.id.button1);
        btnReader=(Button)this.findViewById(R.id.button2);
        pre=getSharedPreferences("sharedDemo", MODE_PRIVATE);//获取到SharedPreferences,并且权限为本程序读写。
        editor=pre.edit();//打开当前SharedPreferences的编辑器。
        
        btnWriter.setOnClickListener(writer);
        btnReader.setOnClickListener(new OnClickListener() {
            
            public void onClick(View v) {
                // 从SharedPreferences中获取数据
                String time=pre.getString("time",null);
                int randNum=pre.getInt("random", 0);
                String result=time==null?"您暂时还未写入数据":"写入时间为:"+time+
                        "\n上次生产的随机数为:"+randNum;
                Toast.makeText(Main.this,result, 5000).show();
            }
        });
    }
    
    View.OnClickListener writer=new OnClickListener() {
        
        public void onClick(View v) {
            SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日 "+"hh:mm:ss");
            editor.putString("time",sdf.format(new Date()));//向SharedPreferences中写入数据。
            editor.putInt("random", (int)(Math.random()*100));
            editor.commit();//提交修改
        }
    };
    
}
复制代码

  创建的文件总是保存在根目录的data/data/<package name>/shared_prefs目录下。可以使用File Explorer工具查看,此工具在Eclipse→windows→Show view→other,打开Show View窗口,选中File Explorer。

 

  如图所示,把此文件导出到PC上,可以看到xml文件中的内容为:

<?xml version= '1.0'  encoding= 'utf-8'  standalone= 'yes'  ?>
<map>
< int  name= "random"  value= "83"  />
<string name= "time" > 2013 3 4 12 : 19 : 38 </string>
</map>

  

   在创建一个SharedPreferences的时候,如果需要让别的应用程序也能访问到本程序的SharedPreferences,则在创建的时候指定MODE_WORLD_READABLE或MODE_WORLD_WRITEABLE就可以了。在其他程序访问的时候,只要能获取到创建的程序的Context就可以访问了。

  具体步骤:

  1. 需要创建其他程序对应的Context。使用Context.createPackageContext(String packageName, int flags)。
  2. 调用其他应用程序的Context的getSharedPerferences(String name,int mode)即可获取相应的SharedPreferences对象。
  3. 其他操作与操作本程序的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,如需转载请自行联系原作者


相关文章
|
3月前
|
存储 XML 文件存储
Android数据存储:什么是SharedPreferences?它有什么用途?
Android数据存储:什么是SharedPreferences?它有什么用途?
75 0
|
4月前
|
存储 Android开发
Android SharedPreferences的使用
Android SharedPreferences的使用
30 0
|
8月前
|
Android开发
Android 中SharedPreferences的详解
Android 中SharedPreferences的详解
38 0
|
XML 存储 缓存
|
存储 XML JavaScript
Android 性能优化篇之SharedPreferences使用优化
`SharedPreferences(以下简称SP)`是Android本地存储的一种方式,是以`key-value`的形式存储在`/data/data/项目包名/shared_prefs/sp_name.xml`里
306 0
|
存储 XML 缓存
Android 初代 K-V 存储框架 SharedPreferences,旧时代的余晖?
SharedPreferences 是 Android 平台上轻量级的 K-V 存储框架,亦是初代 K-V 存储框架,至今被很多应用沿用。 有的小伙伴会说,SharedPreferences 是旧时代的产物,现在已经有 DataStore 或 MMKV 等新时代的 K-V 框架,没有学习意义。但我认为,虽然 SharedPreference 这个方案已经过时,但是并不意味着 SharedPreference 中使用的技术过时。做技术要知其然,更要知其所以然,而不是人云亦云,如果要你解释为什么 SharedPreferences 会过时,你能说到什么程度?
118 0
|
缓存 Android开发 Kotlin
Kotlin安卓实战之SharedPreferences
Kotlin安卓实战之SharedPreferences
200 0
Kotlin安卓实战之SharedPreferences
|
存储 XML Android开发
Android中SharedPreferences使用小记
Android中SharedPreferences使用小记
147 0
|
存储 XML 文件存储
SharedPreferences实现记住密码的登录界面-Android
最近在学习Android的数据存储,便将自己的理解写下来。新手浅显望理解。
145 0
SharedPreferences实现记住密码的登录界面-Android
|
API Android开发
安卓开发之使用SharedPreferences保存键值对数据
如果您有想要保存的相对较小键值对集合,则应使用 SharedPreferences API。SharedPreferences 对象指向包含键值对的文件,并提供读写这些键值对的简单方法。每个 SharedPreferences 文件均由框架进行管理,可以是私有文件,也可以是共享文件。
163 1
安卓开发之使用SharedPreferences保存键值对数据