简介Android应用中sharedPreferences类存储数据的用法

所属分类: 软件编程 / Android 阅读数: 1241
收藏 0 赞 0 分享

在Android开发中,经常会遇到这样一种情况,即需要将用户偏好设置(如用户偏好的app色彩主题)、与特定登录用户相关的设置(如不同登陆用户的偏好)、整个app的生命周期内的设置(如首次登陆显示介绍页)存储在用户本地,那么首先考虑使用sharedPreferences。这是Android中专门用来存储轻量级键值对数据的类,会在本地以xml文件形式存储。

一、 运行机制
接口:SharedPreferencesImpl在该接口中,定义了一个Editor接口、一个edit方法、多个get方法、一个监听器用于监听内容变更。其中,Editor接口主要用来写入数据,edit方法用来对外提供一个editor实例,get方法用来获取键值对,监听器用于实现类中监听。
接口:Editor接口中含有多个put方法、一个commit方法等。之所以要独立出一个接口来进行写操作,是为了保证数据写入的完整性。主要考虑的场景是如果同时要写入多条键值对,这些键值对不会逐条写入文件中,而是先打包在一起,再一次性写入,即one-at-a-time。具体实现方法是在Editor实现一个hashMap来暂存要写入的数据,先把所有键值对写入内存中的该hashMap中,然后再一次性写入文件中。
该过程可以概括为先commitToMemory, 再writeToFile。

二、 使用方法
首先,想写入键值对,要先获取一个sharedPreferences对象。
此时需要提供两个要素:context上下文对象,对应的文件名字。
这里,我们要明确这些键值对的实际存储方式:它们是以多个文件的形式存储: /data/data/{packageName}/shared_prefs/{name}.xml。其中,实际的{name}.xml是在程序中指定的。
那么,我们只要调用context.getSharedPreferences(name, mode)即可获取到所在packageName文件夹里对应的name.xml文件映射过来的SharedPreferences对象。其中,mode是读取文件的方式。
示例:
1、使用SharedPreferences保存数据方法如下:

//实例化SharedPreferences对象(第一步) 
SharedPreferences mySharedPreferences= getSharedPreferences("test", 
Activity.MODE_PRIVATE); 
//实例化SharedPreferences.Editor对象(第二步) 
SharedPreferences.Editor editor = mySharedPreferences.edit(); 
//用putString的方法保存数据 
editor.putString("name", "Karl"); 
editor.putString("habit", "sleep"); 
//提交当前数据 
editor.commit(); 
//使用toast信息提示框提示成功写入数据 
Toast.makeText(this, "数据成功写入SharedPreferences!" , Toast.LENGTH_LONG).show();

执行以上代码,SharedPreferences将会把这些数据保存在test.xml文件中,可以在File Explorer的data/data/相应的包名/test.xml 下导出该文件,并查看。
2、使用SharedPreferences读取数据方法如下:

//同样,在读取SharedPreferences数据前要实例化出一个SharedPreferences对象 
SharedPreferencessharedPreferences= getSharedPreferences("test", 
Activity.MODE_PRIVATE); 
// 使用getString方法获得value,注意第2个参数是value的默认值 
String name =sharedPreferences.getString("name", ""); 
String habit =sharedPreferences.getString("habit", ""); 
//使用toast信息提示框显示信息 
Toast.makeText(this, "读取数据如下:"+"\n"+"name:" + name + "\n" + "habit:" + habit, 
Toast.LENGTH_LONG).show(); 

三、理解
我们可以简单的理解为:在手机本地某个地方会存放我们自定义的xml文件,每个文件用来存放相关的键值对数据。比如我们希望存储用户的偏好设置,即可创建一个名为UserPref的SharedPreferences并读写即可。

四、比较getSharedPreferenced和getPreference
getSharedPreferenced获取的文件是在package内都可以使用context对象获取到的,只需要指定name就可以获取到特定的xml文件。
但是,getPreference方法是专门用在Activity内部的,创建的xml文件只能在该Activity上下文内获取,而且不需要指定名字,这个xml文件只属于这个Activity。
其它就没有区别了。唯一区别就是一个权限域的区别。
示例:

 Context context = getActivity();
 SharedPreferences sharedPref = context.getSharedPreferences("userPref", MODE_PRIVATE);
 SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);

更多精彩内容其他人还在看

Android中加入名片扫描功能实例代码

这篇文章主要介绍了Android中加入名片扫描功能实例代码的相关资料,需要的朋友可以参考下
收藏 0 赞 0 分享

Android仿微信发表说说实现拍照、多图上传功能

这篇文章主要为大家详细介绍了Android仿微信发表说说实现拍照、多图上传功能,使用Retrofit2.0技术,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

设置Android系统永不锁屏永不休眠的方法

在进行Android系统开发的时候,有些特定的情况需要设置系统永不锁屏,永不休眠。本篇文章给大家介绍Android 永不锁屏,开机不锁屏,删除设置中休眠时间选项,需要的朋友一起学习吧
收藏 0 赞 0 分享

Android Retrofit 2.0框架上传图片解决方案

这篇文章主要介绍了Android Retrofit 2.0框架上传一张与多张图片解决方案,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Android自定义等待对话框

这篇文章主要为大家详细介绍了Android自定义等待对话框的实现方法,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Android中Window添加View的底层原理

这篇文章主要介绍了Android中Window添加View的底层原理,需要的朋友可以参考下
收藏 0 赞 0 分享

Android调用系统默认浏览器访问的方法

这篇文章主要介绍了Android调用系统默认浏览器访问的方法的相关资料,需要的朋友可以参考下
收藏 0 赞 0 分享

Android开发退出程序的方法汇总

Android程序有很多Activity,比如说主窗口A,调用了子窗口B,子窗口B又调用子窗口C,back返回子窗口B后,在B中如何关闭整个Android应用程序呢? 下面脚本之家小编就给大家介绍android开发退出程序的几种方法,感兴趣的朋友参考下吧
收藏 0 赞 0 分享

Android程序开发中单选按钮(RadioGroup)的使用详解

在android程序开发中,无论是单选按钮还是多选按钮都非常的常见,接下来通过本文给大家介绍Android程序开发中单选按钮(RadioGroup)的使用,需要的朋友参考下吧
收藏 0 赞 0 分享

Android实现仿网易今日头条等自定义频道listview 或者grideview等item上移到另一个view中

这篇文章主要介绍了Android实现仿网易今日头条等自定义频道listview 或者grideview等item上移到另一个view中 的相关资料,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多