android MMKV数据持久化缓存集合

前言

最近在使用mmkv缓存的时候 发现没有集合缓存
非常不方便 自己写一个方法

MMKV

public class MmkvUtils {private MmkvUtils() {throw new UnsupportedOperationException("u can't instantiate me...");}public static void init() {MMKV.initialize(LeoUtils.getApplication());}/*默认表名put值*/public static void put(String key, Object object) {MMKV mmkv = MMKV.defaultMMKV();if (object instanceof String) {mmkv.encode(key, (String) object);} else if (object instanceof Integer) {mmkv.encode(key, (Integer) object);} else if (object instanceof Boolean) {mmkv.encode(key, (Boolean) object);} else if (object instanceof Float) {mmkv.encode(key, (Float) object);} else if (object instanceof Long) {mmkv.encode(key, (Long) object);} else {mmkv.encode(key, object.toString());}}/*默认表名获取值*/public static Object get(String key, Object defaultObject) {MMKV mmkv = MMKV.defaultMMKV();if (defaultObject instanceof String) {return mmkv.decodeString(key, (String) defaultObject);} else if (defaultObject instanceof Integer) {return mmkv.decodeInt(key, (Integer) defaultObject);} else if (defaultObject instanceof Boolean) {return mmkv.decodeBool(key, (Boolean) defaultObject);} else if (defaultObject instanceof Float) {return mmkv.decodeFloat(key, (Float) defaultObject);} else if (defaultObject instanceof Long) {return mmkv.decodeLong(key, (Long) defaultObject);}return null;}/*默认表名移除值*/public static void remove(String key) {MMKV mmkv = MMKV.defaultMMKV();mmkv.removeValueForKey(key);}/*默认表名判断当前值是否存在*/public static boolean contains(String key) {MMKV mmkv = MMKV.defaultMMKV();return mmkv.contains(key);}/*默认表明用来保存类*/public static <T extends Serializable> boolean putByClass(String key, T entity) {if (entity == null) {return false;}MMKV mmkv = MMKV.defaultMMKV();String json = GsonUtil.ser(entity);return mmkv.encode(key, json);}/*默认表明用来保存类1、移除和查询同普通数据类型*/public static <T extends Serializable> T getByClass(String key, Class<T> clazz) {MMKV mmkv = MMKV.defaultMMKV();String json = mmkv.decodeString(key,null);if (json == null) {return null;}return GsonUtil.deser(json, clazz);}/*如果不想用默认表明,也可以用如下方式,自定义个MMKV kv = MMKV.mmkvWithID("MyID");*//**用途:增改sp的数组  name-自定义集合的名称*/public static <T> Boolean putArray( List<T> list, String name) {MMKV kv = MMKV.defaultMMKV();if (list == null || list.size() == 0) { //清空kv.putInt(name + "size", 0);int size = kv.getInt(name + "size", 0);for (int i = 0; i < size; i++) {if (kv.getString(name + i, null) != null) {kv.remove(name + i);}}} else {kv.putInt(name + "size", list.size());if (list.size() > 20) {list.remove(0);   //只保留后20条记录}for (int i = 0; i < list.size(); i++) {kv.remove(name + i);kv.remove(new Gson().toJson(list.get(i)));//删除重复数据 先删后加kv.putString(name + i, new Gson().toJson(list.get(i)));}}return kv.commit();}/**用途:加载sp的数组 name-自定义集合的名称*/public static <T> ArrayList<T> getArray( String name, T bean) {MMKV kv = MMKV.defaultMMKV();ArrayList<T> list = new ArrayList<T>();int size = kv.getInt(name + "size", 0);for (int i = 0; i < size; i++) {if (kv.getString(name + i, null) != null) {try {list.add((T) new Gson().fromJson(kv.getString(name + i, null), bean.getClass()));} catch (Exception e) {e.printStackTrace();}}}return list;}}

使用方法

业务场景 用户读取了谋篇文章 加入缓存
打开历史浏览 可以看到之前的item

 MmkvUtils.putArray(cache, "history");ArrayList<HomeBean> history = MmkvUtils.getArray("history", new HomeBean());

实现缓存效果

1

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

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

相关文章

R语言lavaan结构方程模型(SEM)实践技术应用

基于R语言lavaan程序包&#xff0c;通过理论讲解和实际操作相结合的方式&#xff0c;由浅入深地系统介绍结构方程模型的建立、拟合、评估、筛选和结果展示的全过程。我们筛选大量经典案例&#xff0c;这些案例来自Nature、Ecology、Ecological Applications、Journal of Ecolog…

Linux动态追踪——ftrace

目录 摘要 1 初识 1.1 tracefs 1.2 文件描述 2 函数跟踪 2.1 函数的调用栈 2.2 函数调用栈 2.3 函数的子调用 3 事件跟踪 4 简化命令行工具 5 总结 摘要 Linux下有多种动态追踪的机制&#xff0c;常用的有 ftrace、perf、eBPF 等&#xff0c;每种机制适应于不同的场…

分享一个可以查看进程虚拟内存占用的 shell 脚本

分享一个可以查看进程虚拟内存占用的 shell 脚本 来源&#xff1a;https://gceasy.io/gc-recommendations/long-pause-solution.jsp 这里命名为 show_process_swap.sh #!/bin/bash # Get current swap usage for all running processes # Erik Ljungstrom 27/05/2011 # Mo…

Windows C++ 使用WinAPI实现RPC

demo下载地址&#xff1a;https://download.csdn.net/download/2403_83063732/88958730 1、创建IDL文件以及acf文件&#xff08;创建helloworld.idl helloworld.acf&#xff09; 其中IDL文件&#xff1a; import "oaidl.idl"; import "ocidl.idl"; [ …

嵌入式教学实验箱_操作教程:2-26 交通灯控制实验

一、实验目的 掌握GPIO引脚配置方法和定时器控制LED的原理&#xff0c;并实现交通灯的闪烁控制。 二、实验原理 StarterWare StarterWare是一个免费的软件开发包&#xff0c;它包含了示例应用程序。StarterWare提供了一套完整的GPIO寄存器配置接口&#xff0c;简化了开发步…

缓存把我坑惨了..

故事 春天&#xff0c;办公室外的世界总是让人神往的&#xff0c;小猫带着耳机&#xff0c;托着腮帮&#xff0c;望着外面美好的春光神游着… 一声不和谐的座机电话声打破这份本该属于小猫的宁静&#xff0c;“hi&#xff0c;小猫&#xff0c;线上有个客户想购买A产品规格的商…

【开发工具学习_Xshell介绍与安装】

开发工具学习_Xshell介绍与安装 开发工具学习_Xshell介绍与安装Xshell介绍Xshell安装 开发工具学习_Xshell介绍与安装 Xshell介绍 Xshell [1]是一个强大的安全终端模拟软件&#xff0c;它支持SSH1, SSH2, 以及Microsoft Windows 平台的TELNET 协议。Xshell 通过互联网到远程主…

spring中事务失效的场景有哪些?

异常捕获处理 在方法中已经将异常捕获处理掉并没有抛出。 事务只有捕捉到了抛出的异常才可以进行处理&#xff0c;如果有异常业务中直接捕获处理掉没有抛出&#xff0c;事务是无法感知到的。 解决&#xff1a;在catch块throw抛出异常。 抛出检查异常 spring默认只会回滚非检…

Linux symfonos

信息搜集 https://yutianqaq.github.io/ 赛博雨天 PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 7.4p1 Debian 10deb9u6 (protocol 2.0) | ssh-hostkey: | 2048 ab:5b:45:a7:05:47:a5:04:45:ca:6f:18:bd:18:03:c2 (RSA) | 256 a0:5f:40:0a:0a:…

国产化三防笔记本丨亿道国产加固笔记本FT-2000/4处理器

国产化加固笔记本是指采用国产操作系统和处理器&#xff0c;通过技术手段对其进行硬件加固、软件加密、数据安全等多方面加强处理的产品。这种笔记本电脑通常被用于政府项目、金融行业等对安全性要求极高的领域。 在国产化加固笔记本中&#xff0c;硬件加固是重要的一环。为了保…

SAP CAP篇十四:写个ERP的会计系统吧,Part I

本文目录 本系列文章目标程序框架使用CDS CLI创建程序创建公司主数据数据库表设计初始数据初始数据&#xff1a;Country初始数据&#xff1a;Currency初始数据&#xff1a;Language Service 定义生成Fiori AppApp运行 本系列文章 SAP CAP篇一: 快速创建一个Service&#xff0c…

day57 动态规划part17● 647. 回文子串 ● 516.最长回文子序列● 动态规划总结篇

如果大家做了很多这种子序列相关的题目&#xff0c;在定义dp数组的时候 很自然就会想题目求什么&#xff0c;我们就如何定义dp数组。 布尔类型的dp[i][j]&#xff1a;表示区间范围[i,j] &#xff08;注意是左闭右闭&#xff09;的子串是否是回文子串&#xff0c;如果是dp[i][j…