技术标签: SharedPreferences 安卓开发 Android
SharedPreferences
是Android
平台给我们提供的一个轻量级的存储类,使用非常简单,能够轻松的存储数据和读取数据,特别适合用于保存软件配置参数。SharedPreferences只能保存简单类型的数据,例如:String
、int
等。一般会将复杂类型的数据转换成Base64
编码,以字符串的形式保存。SharedPreferences
背后是用xml
文件存放数据,文件存放在/data/data/<package name>/shared_prefs
目录下。
使用SharedPreferences
保存key-value
对的步骤如下:
Activity
类的getSharedPreferences
方法获得SharedPreferences
对象,其中存储key-value
的文件名由getSharedPreferences
方法的第一个参数指定。SharedPreferences
接口的edit
获得SharedPreferences.Editor
对象。SharedPreferences.Editor
接口的putXxx
方法保存key-value
对,其中Xxx
表示不同的数据类型。例如:字符串类型的value
需要用putString
方法。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.Editor
有 apply
和 commit
两个方法用于提交数据编辑,这两个方法的区别在于:
apply
没有返回值而commit
返回boolean
表明修改是否提交成功
apply
是将修改数据原子提交到内存, 而后异步真正提交到硬件磁盘, 而commit
是同步的提交到硬件磁盘,因此,在多个并发的提交commit
的时候,他们会等待正在处理的commit
保存到磁盘后在操作,从而降低了效率。而apply
只是原子的提交到内容,后面有调用apply
的函数的将会直接覆盖前面的内存数据,这样从一定程度上提高了很多效率。
apply
方法不会提示任何失败的提示。
由于在一个进程中,sharedPreference
是单实例,一般不会出现并发冲突,如果对提交的结果不关心的话,建议使用apply
,当然需要确保提交成功且有后续操作的话,还是需要用commit
的。
文章浏览阅读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工作流以请假流程来看下数据库中数据流转情况初始状态员工发起请假申请常见功能流程标题发起申请我的发起我的待办我的已办催办转办驳回撤回抄送加签会签或签为什么使用工作流引擎?反证法,如果不使用工作流引擎,先以请假流程举例,从头开始开发流程的业务逻辑:(来看看会出现哪些问题?使用工作流能解决哪些问题?又会带来什么问题?)一_工作流引擎是什么
文章浏览阅读435次。访问解题链接去访问题目,可以进行答题。根据web题一般解题思路去解答此题。看源码,请求,响应等。提交与题目要求一致的内容即可返回flag。然后提交正确的flag即可得分。web题主要考察SQL注入,XSS等相关知识。涉及方向较多。此题主要涉及源码审计,MySQL相关的知识。flag格式 CTF{}我们访问网站之后 出现这个我们要先进行查看源码发现了 sourc..._preg_match(/.$arrreq./is,$strvalue)==1
文章浏览阅读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
文章浏览阅读550次。开发所需工具类开发所需jar具体的代码不贴了,说明下PayConfigUtil中的参数APP_ID和APP_SECRET在公众平台MCH_ID和API_KEY在商户平台,其中API_KEY是自己设置的,并不是自动生成的。Controlle..._微信支付对应示例 java appid secret
文章浏览阅读538次,点赞15次,收藏3次。algorithm2e包实现子编号问题_tex algorithm标号
文章浏览阅读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
文章浏览阅读2.8k次。Python内置了整数、复数、浮点数三种数字类型。整数整数是没有小数部分的数值,与数学上的一样:>>> 11>>> -1-1整数没有大小限制,只要你的内存足够大,就可以创建任意大小的整数:>>> 111111111111111111111111111111111111111111111111111111111111111111111111111..._python 语言的浮点数可以不带小数部分
文章浏览阅读490次。USART_FLAG_TXE:表示数据缓冲区是否为空,为空时置1,表示可以写数据到数据缓冲区,有可能数据没有发送完。USART_FLAG_TC:表示数据缓冲区的数据发送是否完成。如果最后一次发送到数据缓冲区的数据完成了从移位寄存器到。信号线TX时,才置1,表示数据发送完成,也就是说,这个标志位真正表示数据发送完成。清除TC需要:1.读SR寄存器 & 写DR寄存器;或者 2.直接给TC赋值0;_usart_flag_tc是什么
文章浏览阅读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
文章浏览阅读7.2k次,点赞61次,收藏12次。OCR,光学字符识别(OPTICAL CHARACTER RECOGNITION),作为计算机视觉领域的经典问题之一它指对图像中的文字进行检测识别(包括文字检测+文字识别),并获取文本的结果。常见于拍照检查、文档识别、证照票据识别、车牌识别、自然场景下的文本定位识别等,相关技术在数字时代得到了广泛的应用。如下图是OCR识别结果:作为计算机视觉领域的OCR识别在训练的时候当然也会需要大量的图片数据来供神经网络的学习,一般需要数以千万计的图片才能训练一个文字识别系统,才能达到识别文字的目的。但是如果采用_可控ocr图像生成
文章浏览阅读90次。本题目要求读入一个5*5的迷宫,然后输出基于A*算法求解的从左上角(0,0)到右下角(4,4)的路径。