当前位置: 首页 > web >正文

【Android】SharedPreferences轻量级持久化存储

在这里插入图片描述

Android中文件与数据的存储

Android 使用的文件系统类似于其他平台上基于磁盘的文件系统。Android为我们提供了以下几种保存应用数据的选项:

  • 应用专属存储空间:存储仅供应用使用的文件,可以存储到内部存储卷中的专属目录或外部存储空间中的其他专属目录。使用内部存储空间中的目录保存其他应用不应访问的敏感信息;
  • 共享存储:存储您的应用打算与其他应用共享的文件,包括媒体、文档和其他文件;
  • 偏好设置:以键值对形式存储私有原始数据;
  • 数据库:使用 SQLite、Room将结构化数据存储在专用数据库中。

一:SharedPreferences介绍

SharedPreferences 是 Android 提供的一种轻量级的存储机制,主要存储简单的键值对数据。适合保存用户偏好设置、应用配置和一些小型数据,比如登录状态、主题选择。

这里翻译为 “共享偏好设置”即可,一般简称为SP

SP的特点

  • 持久化:数据在应用被关闭后仍然会被保存。
  • 同步和异步操作:提供了同步保存(commit)和异步保存(apply)的选项。
  • 支持多种数据类型:可以存储 int、boolean、float、String 和 Set 类型的数据。
  • 轻量级:适合存储少量、简单的键值对数据。没有明确规定的存储上限,因为它底层是通过 XML 文件来存储键值对的,理论上只受限于设备的存储空间大小和应用的可用存储量。所以,如果有大量数据需要存储,需要使用数据库存储。

二:应用

需求:把输入的信息保存到轻量级SharedPreferences

布局如下图,xml代码略

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

1:添加数据

findViewById(R.id.btn_save).setOnClickListener(view -> {String userName = etUserName.getText().toString();String userAge = etUserAge.getText().toString();//获取SharedPreferences实例SharedPreferences sp = getSharedPreferences("mySharedPre", Context.MODE_PRIVATE);//开始编辑SharedPreferences.Editor edit = sp.edit();//存放数据edit.putString("key_user_name",userName);edit.putBoolean("key_is_login",true);edit.putInt("key_user_age",Integer.valueOf(userAge));//异步数据提交edit.apply();//同步提交数据,同步会阻塞主线程,不推荐
//            edit.commit();});

2:获取数据

findViewById(R.id.btn_get).setOnClickListener(view -> {String userName = etUserName.getText().toString();String userAge = etUserAge.getText().toString();SharedPreferences sp = getSharedPreferences("mySharedPre",Context.MODE_PRIVATE);sp.getString("key_user_name","notFound");boolean isLogin = sp.getBoolean("key_is_login", false);sp.getInt("key_user_age",404);label.setText("用户:" + userName + (isLogin ? "已登录" : "未登录"));});

3:删除数据

findViewById(R.id.btn_remove).setOnClickListener(view -> {String userName = etUserName.getText().toString();String userAge = etUserAge.getText().toString();SharedPreferences sp = getSharedPreferences("mySharedPre", Context.MODE_PRIVATE);SharedPreferences.Editor edit = sp.edit();edit.remove("key_is_login");edit.clear();//删除mysharedPre文件下所有数据edit.apply();});

注意

三:代码细节分析

1:获取sp实例

			//获取SharedPreferences实例SharedPreferences sp = getSharedPreferences("mySharedPre", Context.MODE_PRIVATE);

第一个参数就是给这个文件取个名字,第二个参数Context.MODE_PRIVATE文件操作模式,决定了该SharedPreferences文件的访问权限,表示 “私有模式”

  • 该模式下,通过getSharedPreferences("mySharedPre", ...)创建的文件(实际是data/data/应用包名/shared_prefs/mySharedPre.xml只能被当前应用访问,其他应用无法读取或修改。
  • 如果多次调用该方法创建同名文件(如mySharedPre),新内容会覆盖原有文件内容

2:提交数据的方式

//异步数据提交edit.apply();//同步提交数据,同步会阻塞主线程,不推荐
//            edit.commit();
  • commit():在当前线程中直接执行 “更新内存 + 写入磁盘” 的完整操作,会阻塞线程(如果在主线程调用,可能导致 UI 卡顿),但会返回一个 boolean 表示提交是否成功。
  • apply():仅在当前线程更新内存,磁盘写入交给后台线程池异步执行(这个线程池是 Android 内部共享的),不阻塞当前线程,也没有返回值,是开发中更推荐的方式(除非需要知道提交结果)。

3:获取hint中值的时机

在获取userName和userAge这两个量的时机应该在按钮按下后,要不按钮获取到的值就为null,吃过亏

四:保存的数据所在位置

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

虽然文件在虚拟手机上,但是这些数据可以存到本地

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

五:效果

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

http://www.xdnf.cn/news/20002.html

相关文章:

  • 【题解】洛谷P1776 宝物筛选 [单调队列优化多重背包]
  • C++----模板特化以及模板声明与定义分离问题
  • AT32网线拔插下,modbus tcp断线重连
  • Linux awk命令完全指南:从原理到实战,搞定文本处理难题
  • 【AI】人工智能 传统和现代 架构和算法的演变历史
  • windows安装谷歌浏览器地址
  • TypeScript `infer` 关键字详解(从概念到实战)
  • AGV 搬运小车路径规划:从地图构建到路径决策的技术全解析
  • 打通 Flutter 与原生状态管理:Android ViewModel 的运用
  • SpringBoot+PDF.js实现按需分片加载(包含可运行样例源码)
  • C++小游戏
  • 腾讯开源HunyuanWorld-Voyager突破性原生3D重建与视频扩散框架
  • 计算机大数据毕业设计选题:基于Spark+hadoop的全球香水市场趋势分析系统
  • 优思学院|5个为什么(5 Whys)分析法一文讲清楚
  • AI编写自动点击器 - 毫秒级精准鼠标连点器
  • kafka:【1】概念关系梳理
  • kvm 虚拟机如何安装 qemu-guest-agent
  • kali_linux
  • 【Linux】线程封装
  • 【FastDDS】Layer DDS之Domain ( 04-DomainParticipantFactory)
  • 采用基于模型的方法实现车辆SOA威胁分析自动化
  • wpf 自定义密码文本框,并且可以双向绑定
  • 吱吱企业通讯软件以安全为核心,构建高效沟通与协作一体化平台
  • 什么是Agent?小白如何学习使用Agent?一篇文档带你详细了解神秘的Agent
  • 容器tomcat镜像制作
  • 算法题2:动态规划
  • Python委托迭代完全指南:从基础到高级设计模式实践
  • Vision Pro图像处理工具全解析
  • Hadoop HDFS-SecondaryNameNode(2nn)详细介绍
  • PPI网络与TF-miRNA调控网络的实现方法(基于《列腺癌研究.pdf》)