kotlin——SharedPreferences的工具类、Room组件、Preferences DataStore

本文详细介绍安卓平台上的数据存储方式,重点介绍SharedPreferences工具类的封装及使用,演示了如何存储和读取不同类型的对象。此外,深入探讨了Room组件,一个基于SQLite的抽象层,提供了SQL查询的编译时验证和方便的注解,简化了数据操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wy313622821

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值