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

作者:iam_wingjay 时间:2023-04-30 22:34:48 

在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,存储
0
投稿

猜你喜欢

  • Java设计模式之Builder建造者模式

    2021-12-16 07:21:53
  • SSM框架实现分页和搜索分页的示例代码

    2022-04-13 04:52:49
  • java 服务器接口快速开发之servlet详细教程

    2022-11-07 09:37:28
  • SpringBoot自定义starter启动器的实现思路

    2023-10-09 00:55:15
  • Android 事件分发详解及示例代码

    2023-09-08 05:18:45
  • Java线程的生命周期的详解

    2022-05-18 00:32:08
  • C#中Dictionary泛型集合7种常见的用法

    2021-08-07 04:47:17
  • Java实现员工管理系统

    2023-04-10 23:44:44
  • Android简单实现一个颜色渐变的ProgressBar的方法

    2023-07-23 00:30:12
  • Android 屏幕截屏方法汇总

    2022-01-23 05:48:18
  • 简介Winform中创建用户控件

    2021-10-14 04:39:37
  • Android设计模式之Builder模式解析

    2022-02-11 20:07:46
  • Java实现矩阵加减乘除及转制等运算功能示例

    2023-07-05 04:49:53
  • C++中左值和右值的区别详解

    2021-09-11 00:07:42
  • java Iterator接口和LIstIterator接口分析

    2023-05-23 21:31:24
  • 利用Android画圆弧canvas.drawArc()实例详解

    2022-05-21 08:45:54
  • SpringBoot整合Shiro框架,实现用户权限管理

    2021-10-27 00:03:02
  • SpringBoot+JWT实现注册、登录、状态续签流程分析

    2022-09-29 09:07:11
  • C# Winform多屏幕多显示器编程技巧实例

    2021-09-19 16:49:09
  • J2SE基础之命令行中编写第一个 Hello World

    2023-10-05 09:43:55
  • asp之家 软件编程 m.aspxhome.com