简介Android应用中sharedPreferences类存储数据的用法
在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);
上一篇: 浅谈java中的一维数组、二维数组、三维数组、多维数组
下一篇: java操作XML实例代码