使用SharedPreferences

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

SharedPreferences与Editor简介

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

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

  • boolean contains(String key):判断SharedPreferences是否包含特定key的数据。
  • abstract Map(String, ?) getAll():获取SharedPreferences数据里全部的key-value对。
  • boolean getXxx(String key, xxx defValue):获取SharedPreferences数据里指定key对应的value。如果该key不存在,返回默认值defValue。其中xxx可以是boolean、float、int、long、String等各种基本类型的值。

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

  • SharedPreferences.Editor clear():清空SharedPreferences里所有数据。
  • SharedPreferences.Editor putXxx(String key, xxx value):向SharedPreferences存入指定key对应的数据。其中xxx可以是boolean、float、int、long、String等各种基本类型的值。
  • SharedPreferences.Editor remove(String key):删除SharedPreferences里指定key对应的数据项。
  • boolean commit():当Editor编辑完成后,调用该方法提交修改。

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

  • Context.MODE_PRIVATE:指定该SharedPreferences数据只能被本应用程序读、写。
  • Context.MODE_WORLD_READABLE:指定该SharedPreferences数据能被其他应用程序读,但不能写。
  • Context.MODE_WORLD_WRITEABLE:指定该SharedPreferences数据能被其他应用程序读、写。

SharedPreferences的存储位置和格式

下面程序示范了如何向SharedPreferences中写入、读取数据,该程序的界面很简单,它只是提供了两个按钮,其中一个用于写入数据,另外一个用于读取数据,故此处不再给出界面布局文件。程序代码如下。

public class MainActivity extends Activity {SharedPreferences preferences;SharedPreferences.Editor editor;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// 获取只能被本应用程序读、写的SharedPreferences对象preferences = getSharedPreferences("zong", MODE_PRIVATE);editor = preferences.edit();Button read = (Button) findViewById(R.id.read);Button write = (Button) findViewById(R.id.write);read.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// 读取字符串数据String time = preferences.getString("time", null);// 读取int类型的数据int randNum = preferences.getInt("random", 0);String result = time == null ? "您暂时还未写入数据": "写入时间为:" + time+ "\n上次生成的随机数为:" + randNum;// 使用Toast提示信息Toast.makeText(MainActivity.this, result, Toast.LENGTH_LONG).show();}});write.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 " + "hh:mm:ss");// 存入当前时间editor.putString("time", sdf.format(new Date()));// 存入一个随机数editor.putInt("random", (int) (Math.random() * 100));// 提交所有存入的数据editor.commit();}});}}

实例代码下载
SharedPreferences数据总是保存在/data/data//shared_prefs目录下,SharedPreferences数据总是以XML格式保存。通过File Explorer面板的导出文件按钮将该XML文件导出到XML文档,打开该XML文档可看到如下文件内容:

<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map><int name="random" value="56" /><string name="time">2015年02月24日 10:40:21</string>
</map>

从上面的文件不难看出,SharedPreferences数据文件是一个根元素为

实例:记录应用程序的使用次数

这个简单的示例可以记住应用程序的使用次数:当用户第一次启动该应用程序时,系统创建SharedPreferences来记录使用次数。用户以后启动应用程序时,系统先读取SharedPreferences中记录的使用次数,然后将使用次数加1。

本示例程序的代码如下。

public class MainActivity extends Activity {SharedPreferences preferences;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);preferences = getSharedPreferences("count", MODE_WORLD_READABLE);// 读取SharedPreferences里的count数据int count = preferences.getInt("count", 0);// 显示程序以前使用的次数Toast.makeText(this, "程序以前被使用了" + count + "次。", Toast.LENGTH_LONG).show();SharedPreferences.Editor editor = preferences.edit();// 存入数据editor.putInt("count", ++count);// 提交修改editor.commit();}}

示例代码下载

读、写其他应用SharedPreferences

要读、写其他应用的SharedPreferences,前提是创建该SharedPreferences的应用程序指定相应的访问权限,例如指定了MODE_WORLD_READABLE,这表明该SharedPreferences可被其他应用程序读取;指定了MODE_WORLD_WRITABLE,这表明该SharedPreferences可被其他程序写入。

例如上一个示例创建SharedPreferences时就指定了MODE_WORLD_READABLE模式,这表明该SharedPreferences数据可以被其他程序读取。

为了读取其他程序的SharedPreferences,可按如下步骤进行。
1. 需要创建其他程序对应的Context,例如如下代码。

useCount = createPackageContext("tk.zongzhankui.io", Context.CONTEXT_IGNORE_SECURITY);

上面的程序中tk.zongzhankui.io就是其他程序的包名——实际上Android系统就是用应用程序的包名来作为该程序的标识的。
2. 调用其他程序的Context的getSharedPreferences(String name, int mode)即可获取相应的SharedPreferences对象。
3. 如果需要向其他应用的SharedPreferences数据写入数据,调用SharedPreferences的edit()方法获取相应的Editor即可。

下面的程序示范如何读取上一个程序所保存的SharedPreferences数据。

public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Context useCount = null;try {// 获取其他程序所对应的ContextuseCount = createPackageContext("tk.zongzhankui.usecount", Context.CONTEXT_IGNORE_SECURITY);} catch (PackageManager.NameNotFoundException e) {e.printStackTrace();}// 使用其他程序的Context获取对应的SharedPreferencesSharedPreferences prefs = useCount.getSharedPreferences("count", Context.MODE_WORLD_READABLE);// 读取数据int count = prefs.getInt("count", 0);TextView show = (TextView) findViewById(R.id.show);// 显示读取的数据内容show.setText("UseCount应用程序以前被使用了" + count + "次。");}}

实例代码下载
事实上,如果开发者不通过先获取其他应用程序的Context,再获取SharedPreferences的方式也可读取SharedPreferences的数据——开发者完全使用以IO流的方式先读取SharedPreferences对应的XML文件,再通过XML解析来获取数据也是可行的,只是这种方式过去烦琐,而使用SharedPreferences来读写数据则简单得多。

转载于:https://www.cnblogs.com/zongzhankui/p/5875323.html

使用SharedPreferences相关推荐

  1. Android SharedPreferences 的使用

    学而时习之,稳固而之心,如果这边文章帮助了您,希望给一个赞 如果你只是着急使用忘记了方法 那么下面这些代码完全满足了您的使用 private static final String USER = &q ...

  2. Android开发之SharedPreferences的封装

    对于大部分初学者来说,如果想利用SharedPreferences进行数据存储的话大部分人(包括本人)应该会这样: 存储: SharedPreferences sharedPreferences = ...

  3. SharedPreferences的工具类,使用起来方便、快捷

    SharedPreferences的工具类,使用起来方便.快捷:上代码: import android.content.Context;import android.content.SharedPre ...

  4. Android SharedPreferences保存和读取对象

    SharedPreferences保存和读取对象 1.首先要序列化对象(以下是序列化实体类的样例,不方便贴出实体类全部的代码) public class LoginResult extends Bas ...

  5. Android之SharedPreferences详解

    SharedPreferences是Android中最容易理解的数据存储技术,实际上SharedPreferences处理的就是一个key-value(键值对)SharedPreferences常用来 ...

  6. SharedPreferences小细节

    废话不多讲,直接入题:以下,SharedPreferences小马就简称SP了: SP一般建议在全局文件中操作,即:在继承Application的扩展类中操作,这样做的原因是SP只是为了存储一些应用及 ...

  7. Android 中文api (88)——SharedPreferences

    前言 本章内容是android.content.SharedPreferences,版本为Android 2.3 r1,翻译来自"madgoat",欢迎大家访问他的博客:http: ...

  8. 实例教程五:采用SharedPreferences保存用户偏好设置参数

    android水管工人游戏源码 http://www.eoeandroid.com/thread-207446-1-1.html Android推箱子小游戏 http://www.eoeandroid ...

  9. android: SharedPreferences存储

    不同于文件的存储方式,SharedPreferences 是使用键值对的方式来存储数据的.也就是 说当保存一条数据的时候,需要给这条数据提供一个对应的键,这样在读取数据的时候就可 以通过这个键把相应的 ...

  10. Android-02:使用SharedPreferences存储简单数据

    Android有许多数据存储的方式: 1 使用SharedPreferences存储数据 2 文件存储数据 3 SQLite数据库存储数据 4 使用ContentProvider存储数据 5 网络存储 ...

最新文章

  1. 信息系统项目管理师-信息化与信息系统核心知识点思维脑图
  2. boost::lockfree::detail::tagged_ptr用法的测试程序
  3. PX4原生固件SPI驱动动编写与IMU传感器替换
  4. 利用memcached实现CAS单点登录集群部署
  5. Linux下的free命令
  6. 【jQuery笔记Part1】07-jQuery操作css-添加删除切换类、开关灯泡案例
  7. 蓝桥杯 ALGO-58 算法训练 字串逆序
  8. 如何自学python知乎-学习Python价格多少?如何学习好?老男孩IT教育
  9. Cygwin ssh
  10. 火车票售票系统需求分析
  11. 关于支持FLV、HLS、RTSP、WS-FLV/WS-RTSP、WEBRTC、HEVC/H265的永久免费H5直播点播播放器SkeyeWebPlayer.js断线重连问题
  12. 2021 年“泰迪杯”数据分析技能赛 B 题 肥料登记数据分析
  13. 淘口令 java,抓包获取淘口令的解决方案
  14. 区块链技术与应用(北大公开课,肖臻)- ETH 反思
  15. Packet Tracer搭建局域网以及实现局域网互通
  16. 星球大战1-6[Star Wars 1-6]
  17. Unity - RenderDoc 抓帧导出 FBX(带UV)
  18. stm32 外部中断不起作用
  19. 有什么软件可以编译汇编程序?
  20. SecureCRT快速连接服务器

热门文章

  1. 数组指针和指针数组的区别(1)
  2. 完整的node脚手架搭建服务
  3. keepalived+nginx实现高可用
  4. js-比较两个日期的大小
  5. JavaScript实现输入验证(简单的用户注册)
  6. OA项目实战(二) 开发准备
  7. QT的事件分发、事件过滤器详解
  8. sqlserver连接和操作数据库
  9. Object-C基础入门笔记(一)
  10. redisson 看门狗_Redisson的分布式锁