8.1使用SharedPreferences

有时候,应用程序有少量数据需要保存,而且这些数据的格式很简单,都是普通的字符串,标量类型的值等,比如应用程序的各种配置信息(如是否打开音效,是否使用震动效果等),小游戏的玩家积分(如扫雷英雄榜之类的)等,对于这种数据,Android提供了SharedPreferences进行保存。

8.1.1 SharedPreferences与Editor简介

SharedPreferences保存的数据主要是类似于配置信息格式的数据,因此它保存的数据主要是简单类型的key-values对。

SharedPreferences接口主要负责读取应用程序的Preferences数据,它提供了如下常用方法来访问SharedPreferences中的key-values对。

>boolean contains(String key):判断SharedPreferences是否包含特定key的数据。

>abstract Map<String,?> getAll():获取SharedPreferences数据里全部的key-value对。

>boolean getXxx(String key,xxx defValue): 获取SharePreferences数据里指定key对应的value。如果该key不存在,则返回默认值defValue。其中,xxx可以是boolean,float,int,long,String等各种基本类型的值。

SharePreferences接口本身并没有提供写入数据的能力,而是通过SharePreferences的内部接口,SharePreferences调用edit()方法即可获取其它所对应的Editor对象。Editor提供了如下方法来向SharePreferences写入数据。

>SharePreferences.Editor clear():清空SharePreferences里所有数据。

>SharePreferences.Editor putXxx(String key, xxx value):向SharePreferences存入指定key对应的数据。其中xxx可以是boolean,float,int,long,String等各种基本类型的值。

>SharePreferences.Editor remove(String key):删除SharePreferences里指定key对应的数据项。

>boolean commit():当Editor编辑完成后,调用该方法提交修改。

*从用法角度来看,SharePreferences和SharePreferences.Editor组合起来非常像Map,其中SharePreferences负责根据key值读取数据,而SharePreferences.Editor则用于写入数据。

SharePreferences本身是一个接口,程序无法直接创建SharePreferences实例,只能通过Context提供的getSharedPreferences(String name,int mode)方法来获取SharePreferences实例,该方法的第二个参数支持如下几个值。

>Context.MODE_PRIVATE:指定该ShardPreferences数据只能被本应用程序读写。

>Context.MODE_WORLD_READABLE:指定该SharePreferences数据能被其他应用程序读,但不能写。

>Context.MODE_WORLD_WRITEABLE:指定该SharePreferences数据能被其他应用程序读写。

*从Android 4.2开始,Android不在推荐使用MODE_WORLD_READABLE,MODE_WORLD_WRITEABLE这两种模式,因为这两种模式允许其他应用程序来读或写本应该创建的数据,因此容易导致安全漏洞。如果应该程序确实需要把内部数据暴露出来供其他应用访问,则应该使用本书后面介绍的ContentProvider。

SharePreferences的存储位置和格式

下面的程序示范了如何向SharePreferences中写入数据,读取数据。该程序的界面很简单,它只是提供了两个按钮,其中一个用于写入数据;另一个用于读取数据。

SharePreferences preferences ;

SharePreferences.Editor editor;

intit(){

//获取只能被本应用程序读写的SharePreferences对象

preferences=getSharedPreferences("XJL",MODE_PRIVATE);

editor=preferences.editor();

}

//读取子浮串数据

String time=perferences.getString("time",null);

int randNum=preferences.getInt("random",0);

//存入当前时间

editor.putString("time",sdf.format(new Date()));

     //存入一个随机数

editor.putInt("random",(int)(Math.random()*100));

//提交所有存入的数据

editor.commit();

SharePreferences数据总是保存在/data/data/<package name>/shared_prefs目录下,SharedPreferences数据u总是以XML格式保存。通过FileExplorer面板的导出文件按钮导出该XML文档,打开该XML文档可以看到如下文件内容:

<?xml version='1.0' encoding='utf-8' standalone='yes'?>

<map>

<String name="time">2015年01月19日 02:56:01</string>

<int name="random" value="21"/>

</map>

从上面的文档不难看出,SharedPreferences数据文件的根元素是<map.../>元素,该元素里每个子元素代表一个

key-value对,当value是整数类型时,使用<string .../>子元素。。。依次类推。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值