一、SharedPreferences的工具类
代码
class SharedPreferencesUtil// 构造方法
private constructor(context: Context) {
init {
mPreferences = context.getSharedPreferences(mTAG, Context.MODE_PRIVATE)
mEditor = mPreferences.edit()
}
// 存入数据
fun putSP(key: String, value: String) {
mEditor.putString(key, value)
mEditor.commit()
}
// 获取数据
fun getSP(key: String): String? {
return mPreferences.getString(key, "")
}
// 移除数据
fun removeSP(key: String) {
mEditor.remove(key)
mEditor.commit()
}
companion object {
val mTAG = "test"
// 创建一个写入器
private lateinit var mPreferences: SharedPreferences
private lateinit var mEditor: SharedPreferences.Editor
private var mSharedPreferencesUtil: SharedPreferencesUtil? = null
// 单例模式
fun getSPInstance(context: Context): SharedPreferencesUtil {
if (mSharedPreferencesUtil == null) {
mSharedPreferencesUtil = SharedPreferencesUtil(context)
}
return mSharedPreferencesUtil!!
}
}
}
比较成熟得sp工具封装如下:
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//
package ryb.medicine.toolutils;
import android.content.Context;
import android.content.SharedPreferences;
import java.util.Map;
public class SPUtils {
private static SharedPreferences sharedPreferences;
public static final String FILE_NAME = "shared_data";
private static SharedPreferences.Editor editor;
private static SPUtils mSharedPreferencesUtils = null;
public static SPUtils getInstance(Context context) {
if (mSharedPreferencesUtils == null) {
Class var1 = SPUtils.class;
synchronized(SPUtils.class) {
if (mSharedPreferencesUtils == null) {
mSharedPreferencesUtils = new SPUtils(context);
}
}
}
return mSharedPreferencesUtils;
}
private SPUtils(Context context) {
sharedPreferences = context.getSharedPreferences("shared_data", 0);
editor = sharedPreferences.edit();
}
public static void put(String key, Object object) {
if (object instanceof String) {
editor.putString(key, (String)object);
} else if (object instanceof Integer) {
editor.putInt(key, (Integer)object);
} else if (object instanceof Boolean) {
editor.putBoolean(key, (Boolean)object);
} else if (object instanceof Float) {
editor.putFloat(key, (Float)object);
} else if (object instanceof Long) {
editor.putLong(key, (Long)object);
} else {
editor.putString(key, object.toString());
}
editor.commit();
}
public static Object get(String key, Object defaultObject) {
if (defaultObject instanceof String) {
return sharedPreferences.getString(key, (String)defaultObject);
} else if (defaultObject instanceof Integer) {
return sharedPreferences.getInt(key, (Integer)defaultObject);
} else if (defaultObject instanceof Boolean) {
return sharedPreferences.getBoolean(key, (Boolean)defaultObject);
} else if (defaultObject instanceof Float) {
return sharedPreferences.getFloat(key, (Float)defaultObject);
} else {
return defaultObject instanceof Long ? sharedPreferences.getLong(key, (Long)defaultObject) : sharedPreferences.getString(key, (String)null);
}
}
public static void remove(String key) {
editor.remove(key);
editor.commit();
}
public static void clear() {
editor.clear();
editor.commit();
}
public static boolean contains(String key) {
return sharedPreferences.contains(key);
}
public static Map<String, ?> getAll() {
return sharedPreferences.getAll();
}
}
保存字符串的set数组示例:
/**
* Desc: 获取打印失败的单号
*/
public static Set<String> getPrintFailBillNo() {
try {
String res = SPUtils.get(PRINT_FAIL_BILLNO, "").toString();
if (res.isEmpty()) return new HashSet<>();
String[] array = res.split(",");
return new HashSet<>(Arrays.asList(array));
} catch (Exception e) {
return new HashSet<>();
}
}
/**
* Desc: 保存打印失败的单号
*/
public static void setPrintFailBillNo(String no) {
Set<String> set = getPrintFailBillNo();
set.add(no);
String result = String.join(",", set);
SPUtils.put(PRINT_FAIL_BILLNO, result);
}
/**
* Desc: 删除打印失败的单号
*/
public static void delePrintFailBillNo(String no) {
Set<String> set = getPrintFailBillNo();
set.remove(no);
String result = String.join(",", set);
SPUtils.put(PRINT_FAIL_BILLNO, result);
}
使用MMKV也很不错,它基于 mmap 的高性能通用 key-value 组件
二、Room组件
Room简介
Room 是Jetpack 组件库中存储组件之一,是在SQLite 的一个抽象层,使用Room 可以有以下好处
- 针对 SQL 查询的编译时验证。
- 可最大限度减少重复和容易出错的样板代码的方便注解。
Room 可分为三大部分
数据库类: 用于保存数据库并作为应用持久性数据底层连接的主要访问点。
数据实体: 用于表示应用的数据库中的表。
数据访问对象 (DAO): 提供您的应用可用于查询、更新、插入和删除数据库中的数据的方法。
Room 依赖引入
// room依赖
def room_version = "2.2.0-alpha01"
implementation "androidx.room:room-runtime:$room_version"
annotationProcessor "androidx.room:room-compiler:$room_version"
java版本的demo代码(包括增删改查)
下载:https://download.csdn.net/download/wy313622821/87356601
kotlin版本的demo代码(包括增删改查)
注意:依赖引入要是用kapt,示例:
// room依赖
def room_version = "2.2.0-alpha01"
implementation "androidx.room:room-runtime:$room_version"
kapt "androidx.room:room-compiler:$room_version"
需要加入kotlin-kapt
最后,代码的下载地址为:https://download.csdn.net/download/wy313622821/87356718
kotlin协程版本room下载地址为(推荐使用):
https://download.csdn.net/download/wy313622821/87356766