展开说说:Android之SharedPreferences

        SharedPreferences 是一种轻量级的数据持久化存储机制。以key/value键值形式存储在xml文件,用于保存一些应用程序数据。保存/data/data/PACKAGE_NAME/shared_prefs/xxx.Xml文件

SharedPreferences 只能存储string,int,float,long和boolean五个基本数据类型。如果需要存取比较复杂的数据类型,则需要对这些数据进行序列化这一点通过源码可以看到SharedPreferences是个接口它的内部接口是Editor,里面定义了上面五个数据类型的put方法,以及putString、remove、clear、commit、apply方法。

上面可以看出getxx方法不在Edit接口中,他们是在SharedPreferences

父级接口定义的,因此增加、删除、清空方法需要使用edit但get方法不用,下面距离分别验证这些方法。另外下面还有个是检查当前键是否存在可以返回所有可用的键值两个方法。

  1. 布局定义了一些按钮
  1. 定义getSharedPreferences工具类
  2. private static SharedPreferences preferences;
    public static final String SPNAME = "appSpName";public static void putString(String key,String value){getSP().edit().putString(key,value).apply();Log.e(TAG, "putString: "+ getString(key,"你太着急了"));
    }
    public static String getString(String key,String defaultValue){return getSP().getString(key, defaultValue);
    }public static void putInt(String key,int value){getSP().edit().putInt(key,value).apply();
    }
    public static int getInt(String key,int defaultValue){return getSP().getInt(key, defaultValue);
    }public static void putBoolean(String key,boolean value){getSP().edit().putBoolean(key,value).apply();
    }
    public static boolean getBoolean(String key,boolean defaultValue){return getSP().getBoolean(key, defaultValue);
    }public static void putFloat(String key,float value){getSP().edit().putFloat(key,value).apply();
    }
    public static float getFloat(String key,float defaultValue){return getSP().getFloat(key, defaultValue);
    }public static void putLong(String key,long value){getSP().edit().putLong(key,value).apply();
    }
    public static long getLong(String key,long defaultValue){return getSP().getLong(key, defaultValue);
    }/*** 根据key值删除指定元素,各类型通用因为大家的key都是String* @param key*/
    public static void deleteValue(String key){getSP().edit().remove(key).apply();
    }/*** 清空了,创建这个sharedpreference所有的*/
    public static void clearAll(){getSP().edit().clear().apply();
    }/*** 清空了,创建这个sharedpreference所有的*/
    public static boolean containsKey(String key){getSP().edit().clear().apply();//检查当前键是否存在boolean isContains=getSP().contains(key);Log.e(TAG, "containsKey: isContains= "+isContains );//使用getAll可以返回所有可用的键值Map<String,?> keyMap=getSP().getAll();if (!keyMap.isEmpty()){Set<String> keySet = keyMap.keySet();for (String myKey: keySet){Log.e(TAG, "containsKey: myKey= "+myKey );}}return isContains;
    }public static SharedPreferences getSP(){if (preferences == null){preferences = BaseApplication.getContext().getSharedPreferences(SPNAME, Context.MODE_PRIVATE);}return preferences;
    }

    注意:

    2.1 BaseApplication.getContext().getSharedPreferences(SPNAME, Context.MODE_PRIVATE);

    getSharedPreferences方法传入的操作模式
    Context.MODE_PRIVATE:为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容
    Context.MODE_APPEND:模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件.
    特别注意:还有两个MODE_WORLD_READABLE MODE_WORLD_WRITEABLE我们不需要学习了,他们 用来控制其他应用是否有权限读写该文件,Android 4.2版本中已经被弃用

    2.2 applycommit前者是异步后者是同步方法。apply方法时在Android API level 9中引入的,调用它会安全的异步写入SharedPreference Editor当下首选方法。

  3. 定义按钮的点击事件并调用这个工具类
  4. @Override
    public void onClick(View v) {int clickId = v.getId();if (clickId == R.id.asyncAct_putString){SpUtil.putString("name","张三");}else if (clickId == R.id.asyncAct_getString){String name = SpUtil.getString("name", "无名");String name1 = SpUtil.getString("name1", "无名");Log.e(TAG, "getString: name= "+ name +"    name1= "+name1);}else if (clickId == R.id.asyncAct_putBoolean){SpUtil.putBoolean("isBoy",true);}else if (clickId == R.id.asyncAct_getBoolean){boolean isBoy = SpUtil.getBoolean("isBoy", false);Log.e(TAG, "getBoolean: isBoy= "+isBoy);}else if (clickId == R.id.asyncAct_putInt){SpUtil.putInt("age",18);}else if (clickId == R.id.asyncAct_getInt){int age = SpUtil.getInt("age", -1);Log.e(TAG, "getInt:   age= "+age);}else if (clickId == R.id.asyncAct_putFloat){SpUtil.putFloat("height",177.7F);}else if (clickId == R.id.asyncAct_getFloat){float height = SpUtil.getFloat("height", 0.00F);Log.e(TAG, "getFloat: height= "+height );}else if (clickId == R.id.asyncAct_putLong){SpUtil.putLong("weight",70L);}else if (clickId == R.id.asyncAct_getLong){long weight = SpUtil.getLong("weight", 0L);Log.e(TAG, "getLong: weight= "+weight );}else if (clickId == R.id.asyncAct_clearAll){SpUtil.clearAll();} else if (clickId == R.id.asyncAct_containsKey){SpUtil.containsKey("weight");}
    }

  5. 一些小提醒
    1. 应用程序一旦卸载或者通过手机设置页面清缓存,SharedPreference也会被删除。
    2. 在实际开发者很多会涉及敏感数据,针对敏感数据我们呢需要对其加密后再进行存储,取数据也是先解密再使用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2869113.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

F5怎么样?保障AI服务的安全性和交付

伴随着人工智能时代的快速发展&#xff0c;AI已成为企业数字化转型的得力工具&#xff0c;比如为用户提供更好的服务&#xff0c;降低企业成本等。与此同时&#xff0c;AI技术的应用也会带来应用安全等方面的新风险&#xff0c;可见其有着双刃剑效应。作为一家提供多云应用安全…

【时事篇-05-03】20240316 一笔145元拆分成3笔存款存入(排除有相似性的十位数字)

背景需求 前文提到&#xff0c;每笔都存一样的数目&#xff0c;容易被银行识别违法&#xff0c; 【时事篇-05-01】20240112 150元存46只货币基金-CSDN博客文章浏览阅读580次&#xff0c;点赞15次&#xff0c;收藏11次。【时事篇-05-01】20240112 150元存46只货币基金https://…

LCD屏的应用

一、LCD屏应用 Linux下一切皆文件&#xff0c;我们的LCD屏再系统中也是一个文件&#xff0c;设备文件&#xff1a;/dev/fb0。 如果要在LCD屏显示数据&#xff0c;那我们就可以把数据写入LCD屏的设备文件。 1.显示颜色块 LCD屏分辨&#xff1a;800*480 像素 32位:说明一个像…

创新指南|制药行业如何拥抱生成式AI在新药发现与开发中突破获益

生成式AI在药物发现中的应用可加速药物研发过程&#xff0c;并可能降低成本。通过利用GenAI&#xff0c;制药公司能在早期药物发现和开发中实现更快的成果&#xff0c;这包括从目标识别、验证&#xff0c;到优化的多个环节。 AI有潜力在药物筛选和优先排序、目标识别及验证、药…

书客护眼落地灯销量火爆,售罄、补货、又断货、再补货!又成断货王!

今日&#xff0c;备受关注的书客Sun护眼大路灯在市场上掀起了一股抢购热潮&#xff0c;作为近年来照明领域中最大的黑马品牌&#xff0c;始终坚持并最求技术创新的书客品牌&#xff0c;在近日发布全新系列落地护眼台灯后&#xff0c;不仅备受消费者青睐&#xff0c;更是成为了新…

spacy进行简单的自然语言处理的学习

自然语言处理基本概念 概念&#xff1a;自然语言处理&#xff0c;是让机器理解人的语言的过程。 作用&#xff1a;通过使用自然语言处理&#xff0c;机器可以理解人的语言&#xff0c;从而进行语义分析&#xff0c;例如&#xff1a;从一句话中判断喜怒哀乐&#xff1b;从一段文…

MongoDB——linux中yum命令安装及配置

一、创建mongodb-org-3.4.repo文件 vi /etc/yum.repos.d/mongodb-org-3.4.repo 将下面内容添加到创建的文件中 [mongodb-org-3.4] nameMongoDB Repository baseurlhttps://repo.mongodb.org/yum/amazon/2013.03/mongodb-org/3.4/x86_64/ gpgcheck1 enabled1 gpgkeyhttps://www…

【Docker篇】自定义Dockerfile的操作

文章目录 &#x1f354;镜像结构&#x1f6f8;什么是Dockerfile⭐基于Ubuntu镜像构建一个新镜像&#xff0c;运行一个java项目&#x1f50e;使用 java:8-alpine &#x1f354;镜像结构 镜像是将应用程序及其需要的系统函数库、环境、配置、依赖打包而成。 我们以MySQL为例&am…

【PyTorch】基础学习:在终端中打印当前虚拟环境下的Pytorch版本信息

【PyTorch】基础学习&#xff1a;在终端中打印或查看当前虚拟环境下的Pytorch版本信息 &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程…

固定资产管理系统:井然有序,提升利用率,降损增值的解决之道。

固定资产管理系统是一种用于管理和跟踪组织内固定资产的软件系统。固定资产是指组织长期持有并用于生产、运营或提供服务的资产&#xff0c;例如土地、建筑物、机器设备、车辆等。 固定资产管理系统提供了一种集中管理和监控固定资产的方式&#xff0c;帮助组织更好地管理其资产…

Mock.js了解(Mock就是模拟一个后端,Postman模拟前端)

JSON5 Node.js Vue CLI与Mock.js Jquery与Mock.js Mock与分页

【SQLite数据库】的使用

SQLite数据库 文章目录 SQLite数据库0、linux基础知识补充1、SQLite简介1.1 SQLite & MySQL 的优缺点比较1.2 常见的嵌入式数据库 2、数据库的基本命令和用法2.1 创建数据库2.2 创建一张表格2.3 插入一条数据2.4 增加一列2.5 删2.6 改2.7 查看数据库 3、数据库编程3.1 实验…

使用git命令行文件路径全是数字问题

目录 第一章、问题分析1.1&#xff09;报错提示 第二章、解决方式2.1&#xff09;修改设置 友情提醒: 先看文章目录&#xff0c;大致了解文章知识点结构&#xff0c;点击文章目录可直接跳转到文章指定位置。 第一章、问题分析 1.1&#xff09;报错提示 使用git命令行提交的时…

Vue3-03_组件基础_上

单页面应用程序 什么是单页面应用程序 单页面应用程序&#xff08;英文名&#xff1a;Single Page Application&#xff09;简称 SPA&#xff0c;顾 名思义&#xff0c;指的是一个 Web 网站中只有唯一的一个 HTML 页面&#xff0c;所有的 功能与交互都在这唯一的一个页面内完…

[c++] std::future, std::promise, std::packaged_task, std::async

std::promise 进程间通信&#xff0c;std::packaged_task 任务封装&#xff0c;std::async 任务异步执行&#xff1b;std::future 获取结果。 1 std::promise 1.1 线程间同步 std::promise 可以用于线程间通信。 如下代码是 std::promise 中的示例代码。 std::promise - cp…

MySQL语法分类 DQL(3)排序查询

为了更好的学习这里给出基本表数据用于查询操作 create table student (id int, name varchar(20), age int, sex varchar(5),address varchar(100),math int,english int );insert into student (id,name,age,sex,address,math,english) values (1,马云,55,男,杭州,66,78),…

mysql颗粒归仓

B B树&#xff1a;节点排序 一个节点存多个元素 多个元素也排序了 叶子节点间有指针&#xff0c;非叶子节点上的元素在叶子节点冗余&#xff1a;叶子节点存储排好序的all元素 通过数据排序提高查询速度&#xff0c;节点存储多个元素 高度不会太高&#xff0c;一个innodb页B树…

YOLOv9算法原理——使用可编程梯度信息学习想要学习的内容

前言 2023年1月发布YOLOv8正式版后&#xff0c;经过一年多的等待&#xff0c;YOLOv9终于面世了&#xff01;YOLO是一种利用图像全局信息进行目标检测的系统。自从2015年Joseph Redmon、Ali Farhadi等人提出了第一代模型以来&#xff0c;该领域的研究者们已经对YOLO进行了多次更…

#QT(MainWindow初尝---文本编辑器)

1.IDE&#xff1a;QTCreator 2.实验&#xff1a;使用MainWindow做一个文本编辑器 3.记录 &#xff08;1&#xff09;创建几个功能 &#xff08;2&#xff09;为几个功能写实现&#xff0c;这里不能使用转到槽&#xff0c;需要自己用connect函数关联。这里的功能是QAction类&am…

MySQL初阶2——索引的初步理解

目录 一、索引的概念和使用 1. 索引是什么 2. 索引的使用 2.1 查看索引 2.2 创建索引 2.3 删除索引 3. 索引使用的注意事项 二、索引的核心内容——底层的数据结构 1. 前景引入 2. 索引使用的数据结构 2.1 基础版—— B 树 2.2 升级版—— B 树 重点&#xff1a;如…