SharedPreferences 用法详解_sharedpreferences用法-程序员宅基地

技术标签: SharedPreferences  安卓开发  Android  

SharedPreferencesAndroid平台给我们提供的一个轻量级的存储类,使用非常简单,能够轻松的存储数据和读取数据,特别适合用于保存软件配置参数。SharedPreferences只能保存简单类型的数据,例如:Stringint等。一般会将复杂类型的数据转换成Base64编码,以字符串的形式保存。SharedPreferences背后是用xml文件存放数据,文件存放在/data/data/<package name>/shared_prefs目录下。
使用SharedPreferences保存key-value对的步骤如下:

  1. 使用Activity类的getSharedPreferences方法获得SharedPreferences对象,其中存储key-value的文件名由getSharedPreferences方法的第一个参数指定。
  2. 使用SharedPreferences接口的edit获得SharedPreferences.Editor对象。
  3. 通过SharedPreferences.Editor接口的putXxx方法保存key-value对,其中Xxx表示不同的数据类型。例如:字符串类型的value需要用putString方法。
  4. 通过SharedPreferences.Editor接口的commit方法保存key-value对,commit方法相当于数据库事务中的提交操作。

使用SharedPreferences保存key-value对的代码如下:

SharedPreferences sharedPreferences = getSharedPreferences("test", Context.MODE_PRIVATE);

Editor editor = sharedPreferences.edit();//获取编辑器

editor.putString("name", "小明");

editor.putInt("age", 24);

editor.commit();//提交修改

生成的test.xml文件内容如下:

<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
   <string name="name">小明</string>
   <int name="age" value="24" />
</map>

使用SharedPreferences读取数据代码如下:

SharedPreferences sharedPreferences= getSharedPreferences("test",   
Activity.MODE_PRIVATE);   
// 使用getString方法获得value,注意第2个参数是value的默认值   
String name =sharedPreferences.getString("name", "");   
int age =sharedPreferences.getInt("age", 0);   

SharedPreferences的四种操作模式:

Context.MODE_PRIVATE:为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容
Context.MODE_APPEND:模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件.
Context.MODE_WORLD_READABLE:表示当前文件可以被其他应用读取.
Context.MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用写入.

使用SharedPreferences读取其他应用中的Preference
读取其他应用中的Preference的前提条件是:该preference创建时指定了Context.MODE_WORLD_READABLE或者Context.MODE_WORLD_WRITEABLE权限。
例如:有个<package name>com.xiuxiuing.test的应用使用下面语句创建了preference

getSharedPreferences("test", Context.MODE_WORLD_READABLE);

我们要访问上面应用的preference,首先需要创建上面应用的Context,然后通过Context 访问preference,访问preference时会在应用所在包下的shared_prefs目录找到preference ,代码如下:

Context context = createPackageContext("com.xiuxiuing.test", Context.CONTEXT_IGNORE_SECURITY);
SharedPreferences sharedPreferences = context.getSharedPreferences("test", Context.MODE_WORLD_READABLE);
String name = sharedPreferences.getString("name", "");
int age = sharedPreferences.getInt("age", 0);

说明:
SharedPreferences.Editorapplycommit 两个方法用于提交数据编辑,这两个方法的区别在于:

  1. apply没有返回值而commit返回boolean表明修改是否提交成功

  2. apply是将修改数据原子提交到内存, 而后异步真正提交到硬件磁盘, 而commit是同步的提交到硬件磁盘,因此,在多个并发的提交commit的时候,他们会等待正在处理的commit保存到磁盘后在操作,从而降低了效率。而apply只是原子的提交到内容,后面有调用apply的函数的将会直接覆盖前面的内存数据,这样从一定程度上提高了很多效率。

  3. apply方法不会提示任何失败的提示。

由于在一个进程中,sharedPreference是单实例,一般不会出现并发冲突,如果对提交的结果不关心的话,建议使用apply,当然需要确保提交成功且有后续操作的话,还是需要用commit的。

欢迎关注个人公众号

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/meifannao789456/article/details/100079205

智能推荐

input的placeholder设置字体颜色_input中placeholder的字体颜色-程序员宅基地

文章浏览阅读474次。具体的写法::-moz-placeholder { /* Mozilla Firefox 4 to 18 */ color: #fff; font-size: 0.56rem;opacity: 0.8;}::-moz-placeholder { /* Mozilla Firefox 19+ */ color: #fff; font-size: 0.56rem_input中placeholder的字体颜色

为什么使用工作流引擎,什么是工作流引擎,工作流引擎选型以及如何使用_工作流引擎是什么-程序员宅基地

文章浏览阅读1.3w次,点赞24次,收藏144次。文章目录为什么使用工作流引擎?不使用工作流存在以下问题工作流优缺点什么是工作流引擎尝试自己构建工作流引擎有哪些选型方案呢基于bpmn标准进行流程定义国产自定义如何使用SnakerFlow工作流以请假流程来看下数据库中数据流转情况初始状态员工发起请假申请常见功能流程标题发起申请我的发起我的待办我的已办催办转办驳回撤回抄送加签会签或签为什么使用工作流引擎?反证法,如果不使用工作流引擎,先以请假流程举例,从头开始开发流程的业务逻辑:(来看看会出现哪些问题?使用工作流能解决哪些问题?又会带来什么问题?)一_工作流引擎是什么

CTF题库>因缺思汀的绕过_preg_match(/.$arrreq./is,$strvalue)==1-程序员宅基地

文章浏览阅读435次。访问解题链接去访问题目,可以进行答题。根据web题一般解题思路去解答此题。看源码,请求,响应等。提交与题目要求一致的内容即可返回flag。然后提交正确的flag即可得分。web题主要考察SQL注入,XSS等相关知识。涉及方向较多。此题主要涉及源码审计,MySQL相关的知识。flag格式 CTF{}我们访问网站之后 出现这个我们要先进行查看源码发现了 sourc..._preg_match(/.$arrreq./is,$strvalue)==1

SpringMVC基础之三->SpringMVC的使用_prehandle requestbody-程序员宅基地

文章浏览阅读90次。1、SpringMVC的返回JSON数据​ 到目前为止我们编写的所有Controller的方法的返回值都是String类型,但是大家应该都知道,我们有时候数据传递特别是在ajax中,我们返回的数据经常需要使用json,那么如何来保证返回的数据的是json格式呢?使用@ResponseBody注解pom.xml<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0_prehandle requestbody

java开发Demo~微信扫码支付,java开发示例-程序员宅基地

文章浏览阅读550次。开发所需工具类开发所需jar具体的代码不贴了,说明下PayConfigUtil中的参数APP_ID和APP_SECRET在公众平台MCH_ID和API_KEY在商户平台,其中API_KEY是自己设置的,并不是自动生成的。Controlle..._微信支付对应示例 java appid secret

【Latex使用algorithm2e包生成伪代码 实现取消自动编号及添加子编号方法】_tex algorithm标号-程序员宅基地

文章浏览阅读538次,点赞15次,收藏3次。algorithm2e包实现子编号问题_tex algorithm标号

随便推点

NPM 相关命令,报错 node-gyp... 的解决方法_node-gyp-build-程序员宅基地

文章浏览阅读7k次,点赞2次,收藏3次。'node-gyp-build' is not recognized as an internal or external command, operable program or batch file.npm ERR! gyp verb `which` failed Error: not found: python2_node-gyp-build

python规定浮点数类型可以不带小数部分吗_Python标准数据类型-数字-程序员宅基地

文章浏览阅读2.8k次。Python内置了整数、复数、浮点数三种数字类型。整数整数是没有小数部分的数值,与数学上的一样:>>> 11>>> -1-1整数没有大小限制,只要你的内存足够大,就可以创建任意大小的整数:>>> 111111111111111111111111111111111111111111111111111111111111111111111111111..._python 语言的浮点数可以不带小数部分

“USART_FLAG_TXE“ & “USART_FLAG_TC“_usart_flag_tc是什么-程序员宅基地

文章浏览阅读490次。USART_FLAG_TXE:表示数据缓冲区是否为空,为空时置1,表示可以写数据到数据缓冲区,有可能数据没有发送完。USART_FLAG_TC:表示数据缓冲区的数据发送是否完成。如果最后一次发送到数据缓冲区的数据完成了从移位寄存器到。信号线TX时,才置1,表示数据发送完成,也就是说,这个标志位真正表示数据发送完成。清除TC需要:1.读SR寄存器 & 写DR寄存器;或者 2.直接给TC赋值0;_usart_flag_tc是什么

安装ftp连接linux服务器配置,Linux下FTP安装及配置(VSFTPD服务器安装配置、FTP客户端安装配置)...-程序员宅基地

文章浏览阅读348次。安装说明安装环境:CentOS-6.3安装方式:yum安装、rpm源码安装软件:ftp-0.17-51.1.el6.x86_64.rpm下载地址:http://pan.baidu.com/s/1mgHQ0GS环境说明: Linux下有FTP服务,FTP分为服务器端和客户端,某台机器作为FTP服务器,需要安装配置启动vsftpd服务,另一台机器作为客户端,需要安装有ftp客户端或者lftp的rpm包..._ftp-0.17-51.1.el6.x86_64.rpm

高效率OCR场景文字图片合成工具发布!_可控ocr图像生成-程序员宅基地

文章浏览阅读7.2k次,点赞61次,收藏12次。OCR,光学字符识别(OPTICAL CHARACTER RECOGNITION),作为计算机视觉领域的经典问题之一它指对图像中的文字进行检测识别(包括文字检测+文字识别),并获取文本的结果。常见于拍照检查、文档识别、证照票据识别、车牌识别、自然场景下的文本定位识别等,相关技术在数字时代得到了广泛的应用。如下图是OCR识别结果:作为计算机视觉领域的OCR识别在训练的时候当然也会需要大量的图片数据来供神经网络的学习,一般需要数以千万计的图片才能训练一个文字识别系统,才能达到识别文字的目的。但是如果采用_可控ocr图像生成

使用A*算法求解迷宫问题-程序员宅基地

文章浏览阅读90次。本题目要求读入一个5*5的迷宫,然后输出基于A*算法求解的从左上角(0,0)到右下角(4,4)的路径。

推荐文章

热门文章

相关标签