支持对象存储(自动 JSON 序列化和反序列化)的 Android SPUtils 工具类,使用 Gson 实现对象与字符串的互转。
✅ Gson 依赖(如果尚未添加)
在 build.gradle 中加入:
implementation 'com.google.code.gson:gson:2.10.1'
✅ 支持对象的 SPUtils 工具类
package com.htnova.fly.util;
import android.content.Context;
import android.content.SharedPreferences;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
public class SPUtils {
private static final String SP_NAME = "AppCache";
private static SharedPreferences sp;
private static Gson gson = new Gson();
private SPUtils() {}
public static void init(Context context) {
if (sp == null) {
sp = context.getApplicationContext().getSharedPreferences(SP_NAME, Context.MODE_PRIVATE);
}
}
// 基础类型
public static void putString(String key, String value) {
sp.edit().putString(key, value).apply();
}
public static String getString(String key, String defValue) {
return sp.getString(key, defValue);
}
public static void putBoolean(String key, boolean value) {
sp.edit().putBoolean(key, value).apply();
}
public static boolean getBoolean(String key, boolean defValue) {
return sp.getBoolean(key, defValue);
}
public static void putInt(String key, int value) {
sp.edit().putInt(key, value).apply();
}
public static int getInt(String key, int defValue) {
return sp.getInt(key, defValue);
}
public static void putLong(String key, long value) {
sp.edit().putLong(key, value).apply();
}
public static long getLong(String key, long defValue) {
return sp.getLong(key, defValue);
}
public static void putFloat(String key, float value) {
sp.edit().putFloat(key, value).apply();
}
public static float getFloat(String key, float defValue) {
return sp.getFloat(key, defValue);
}
// 存储任意对象
public static <T> void putObject(String key, T obj) {
String json = gson.toJson(obj);
sp.edit().putString(key, json).apply();
}
// 获取对象
public static <T> T getObject(String key, Class<T> clazz) {
String json = sp.getString(key, null);
return json != null ? gson.fromJson(json, clazz) : null;
}
// 获取集合或泛型对象(如 List<User>)
public static <T> T getObject(String key, Type typeOfT) {
String json = sp.getString(key, null);
return json != null ? gson.fromJson(json, typeOfT) : null;
}
public static void remove(String key) {
sp.edit().remove(key).apply();
}
public static void clear() {
sp.edit().clear().apply();
}
public static boolean contains(String key) {
return sp.contains(key);
}
}
✅ 示例用法
1. 存储/读取单个对象:
User user = new User("Tom", 25);
SPUtils.putObject("user", user);
User savedUser = SPUtils.getObject("user", User.class);
2. 存储/读取 List 对象:
List<User> userList = new ArrayList<>();
userList.add(new User("Tom", 25));
userList.add(new User("Jerry", 26));
SPUtils.putObject("user_list", userList);
// 获取时需要指定 Type
Type type = new TypeToken<List<User>>() {}.getType();
List<User> savedList = SPUtils.getObject("user_list", type);
✅ 示例数据类(User)
public class User {
private String name;
private int age;
public User() {}
public User(String name, int age) {
this.name = name;
this.age = age;
}
// Getter / Setter 省略
}
安卓临时缓存sp工具类
安卓理事人2025-12-01 10:54
相关推荐
驰骋工作流7 小时前
流程时效考核的表结构:从待办时限到 WF_CH 考核结果驰骋BPM驰骋低代码低代码工作流引擎传奇开心果编程9 小时前
【Flutter踩坑排雷】第7课:巨型 build 函数坑|全部 UI 写在同一个 build,维护难、隐性异常方白羽12 小时前
Android 双开环境底层剖析与风控检测落地一枕槐安48712 小时前
RAG 服务扛住高并发:缓存、队列、限流三件套weixin_5633714713 小时前
Android Studio 2024 版 Device Explorer 打开方法AIsoft_868915 小时前
职场音频文件怎么整理?录音APP有哪些用法booboosui16 小时前
第一批个人 Agent 用户正在卸载,问题不在模型,在它住在哪儿洞见前行16 小时前
点击图标到内容出现,你的 App 在这几秒里做了什么:Android 冷启动全链路优化实战凯基迪科技16 小时前
芯片UID绑定修改 加密与逆向修改思路分析Liben17 小时前
Weex开发踩坑记录