当前位置: 移动技术网 > 移动技术>移动开发>Android > 简介Android应用中sharedPreferences类存储数据的用法

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

2019年07月24日  | 移动技术网移动技术  | 我要评论

在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);

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网