展开说说: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://www.mzph.cn/news/750607.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【洛谷 P8661】[蓝桥杯 2018 省 B] 日志统计 题解(滑动窗口+优先队列+双端队列+集合)

[蓝桥杯 2018 省 B] 日志统计 题目描述 小明维护着一个程序员论坛。现在他收集了一份“点赞”日志&#xff0c;日志共有 N N N 行。其中每一行的格式是 ts id&#xff0c;表示在 t s ts ts 时刻编号 i d id id 的帖子收到一个“赞”。 现在小明想统计有哪些帖子曾经是“热…

matlab 电机仿真平台GUI

1、内容简介 略 74-可以交流、咨询、答疑 2、内容说明 略 电机仿真平台GUI 包含直流机要加调电压启动、回馈制动、串电阻调速 异步电动机要加串电阻启动、星三角启动、回馈制动模块 3、仿真分析 略 4、参考论文 略

【QT入门】VS2019+QT的开发环境配置

声明&#xff1a;该专栏为本人学习Qt知识点时候的笔记汇总&#xff0c;希望能给初学的朋友们一点帮助(加油&#xff01;) 往期回顾&#xff1a; 【QT入门】什么是qt&#xff0c;发展历史&#xff0c;特征&#xff0c;应用&#xff0c;QtCreator-CSDN博客【QT入门】Windows平台下…

项目三 操作学生管理数据库中的表

项目三 操作学生管理数据库中的表 1&#xff0c;使用MySQL中的常用数据类型 数据类型决定了数据的取值范围、存储方式与占用的空间大小以及能够对其进行的一组合法操作。 1.1&#xff0c;使用数值类型 1&#xff0c;MySQL 的数值类型大致可以分为两个类别&#xff1a;整数类…

论文阅读——GeoChat(cvpr2024)

GeoChat : Grounded Large Vision-Language Model for Remote Sensing 一、引言 GeoChat&#xff0c;将多模态指令调整扩展到遥感领域以训练多任务会话助理。 遥感领域缺乏多模式指令调整对话数据集。受到最近指令调优工作的启发&#xff0c;GeoChat 使用 Vicuna-v1.5和自动化…

深度学习-解读GoogleNet深度学习网络

深度学习-解读GoogleNet深度学习网络 深度学习中&#xff0c;经典网络引领一波又一波的技术革命&#xff0c;从LetNet到当前最火的GPT所用的Transformer&#xff0c;它们把AI技术不断推向高潮。2012年AlexNet大放异彩&#xff0c;它把深度学习技术引领第一个高峰&#xff0c;打…

android studio 连接mumu模拟器调试

1、打开mumu模拟器 2、在Android Studio 中 控制台 cd 到 sdk 目录下 platform-tools 文件夹&#xff0c;有一个adb.exe 可运行程序 一般指令&#xff1a; adb connect 127.0.0.1:7555 但是这个执行在window环境下可能会报错 解决方法是在 adb 之前加 ".\", 问题…

【AI】用iOS的ML(机器学习)创建自己的AI App

用iOS的ML(机器学习)创建自己的AI App 目录 用iOS的ML(机器学习)创建自己的AI App机器学习如同迭代过程CoreML 的使用方法?软件要求硬件开始吧!!构建管道:设计和训练网络Keras 转 CoreML将模型集成到 Xcode 中结论推荐超级课程: Docker快速入门到精通Kubernetes入门到…

迷茫了!去大厂还是创业?

大家好&#xff0c;我是麦叔&#xff0c;最近我创建了一个 学习圈子 有球友在 星球 里提问。 大厂的layout岗位和小厂的硬件工程师岗位&#xff0c;该如何选择&#xff1f; 这个问题我曾经也纠结过&#xff0c;不过现在的我&#xff0c;I am awake&#xff01; 肯定是有大点大。…

GiT: Towards Generalist Vision Transformer through Universal Language Interface

GiT: Towards Generalist Vision Transformer through Universal Language Interface 相关链接&#xff1a;arxiv github 关键字&#xff1a;Generalist Vision Transformer (GiT)、Universal Language Interface、Multi-task Learning、Zero-shot Transfer、Transformer 摘要 …

小清新卡通人物404错误页面模板源码

小清新卡通人物404错误页面模板源码&#xff0c;源码由HTMLCSSJS组成&#xff0c;记事本打开源码文件可以进行内容文字之类的修改&#xff0c;双击html文件可以本地运行效果&#xff0c;也可以上传到服务器里面 下载地址 小清新卡通人物404错误页面模板源码

ClickHouse:一款高效且强大的列式数据库管理系统

ClickHouse是一款开源的列式数据库管理系统&#xff0c;专为大规模数据仓库和数据分析应用而设计。它允许用户快速地存储和处理海量数据&#xff0c;同时提供了简单易用的SQL接口。本文将介绍ClickHouse的概念、技术原理以及使用案例&#xff0c;并探讨其优势和挑战。 一、引言…

鸿蒙Harmony应用开发—ArkTS声明式开发(容器组件:WaterFlow)

瀑布流容器&#xff0c;由“行”和“列”分割的单元格所组成&#xff0c;通过容器自身的排列规则&#xff0c;将不同大小的“项目”自上而下&#xff0c;如瀑布般紧密布局。 说明&#xff1a; 该组件从API Version 9 开始支持。后续版本如有新增内容&#xff0c;则采用上角标单…

Django验证码(二)

一、生成图片 1.1、说明 通过pillow模板库生成图片,步骤如下 安装pillow模板建立 生成验证码内容 方法建立 生成验证码颜色 方法建立 生成验证码 方法1.2、需要安装 Pillow 库 pip install Pillow==9.3.01.3、生成验证码内容 import randomdef random_str(length=4):"…

html中如何让网页禁用右键禁止查看源代码

在网页中&#xff0c;辛辛苦苦写的文章&#xff0c;被别人复制粘贴给盗用去另很多站长感到非常无奈&#xff0c;通常大家复制都会使用选取右键复制&#xff0c;或CTRLC等方式&#xff0c;下面介绍几种禁止鼠标右键代码&#xff0c;可减少网页上文章被抄袭的几率&#xff0c;当然…

Linux学习方法-框架学习法——Linux系统框架

配套视频学习链接&#xff1a;https://www.bilibili.com/video/BV1HE411w7by?p2&vd_sourced488bc722b90657aaa06a1e8647eddfc 目录 Linux系统框架(从裸机到OS) Linux可看成是一个大软件/大程序 应用和驱动 内核态和用户态 Linux的文件系统 Linux初学者首先要搞清楚三…

Microsoft Word 符号 / 特殊符号

Microsoft Word 符号 / 特殊符号 1. 插入 -> 符号 -> 其他符号 -> Wingdings 2References 1. 插入 -> 符号 -> 其他符号 -> Wingdings 2 ​ References [1] Yongqiang Cheng, https://yongqiang.blog.csdn.net/

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

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

Jmeter+Ant 接口自动化环境配置指南

一 、Jmeter安装与配置 https://blog.csdn.net/tester_sc/article/details/80746405 注&#xff1a;Jmeter5.0的环境变量配置与4.0或历往老版本有部分小差异&#xff0c;笔者用的Jmeter 5.0 二 、Ant的安装与配置 # Ant下载地址(下载到指定目录后&#xff0c;进行解压到当前…

python 爬取人民新闻

基础信息获取&#xff1a; 要闻url&#xff1a;https://www.gov.cn/yaowen/liebiao/home.htm 下一页的url&#xff1a;https://www.gov.cn/yaowen/liebiao/home_1.htm 基础代码&#xff1a; import re import openpyxl import requests from lxml import etree import osdef …