IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Kotlin mmkv结合属性委托的一个封装类 -> 正文阅读

[移动开发]Kotlin mmkv结合属性委托的一个封装类

MMKV是腾讯开源的一款是基于 mmap 内存映射的 key-value 组件,底层序列化/反序列化使用 protobuf 实现,性能高,稳定性强。我们现在可以用它完全取代SharePreference。

封装完的工具类我们可以像变量一样读取和存储用户的偏好设置,例如:登陆后的token,uid,从而免登陆等

1.添加引用

implementation 'com.tencent:mmkv-static:1.2.10'

2.创建委托类Preference,读取,存储

我们知道要使用委托,类需要有指定参数的getValue方法,可写的还得有setValue方法,这里我们直接实现ReadWriteProperty接口

import com.tencent.mmkv.MMKV
import kotlin.properties.ReadWriteProperty
import kotlin.reflect.KProperty

class Preference<T>(private val key: String, private val default: T):ReadWriteProperty<Any?,T> {
    private val mMkv by lazy {
        MMKV.defaultMMKV()
    }

    override fun getValue(thisRef: Any?, property: KProperty<*>): T {
      return  when(default){
            is Long -> mMkv.decodeLong(key,default)
            is Int -> mMkv.decodeInt(key,default)
            is Double -> mMkv.decodeDouble(key,default)
            is Boolean -> mMkv.decodeBool(key,default)
            is Float -> mMkv.decodeFloat(key,default)
            is String -> mMkv.decodeString(key,default)
            is ByteArray -> mMkv.decodeBytes(key,default)
            else -> throw IllegalArgumentException("Unsupported type")
        } as T
    }

    override fun setValue(thisRef: Any?, property: KProperty<*>, value: T) {
        mMkv.let {
            when(value){
                is String -> it.encode(key, value)
                is Float -> it.encode(key, value)
                is Boolean -> it.encode(key, value)
                is Int -> it.encode(key, value)
                is Long -> it.encode(key, value)
                is Double -> it.encode(key, value)
                is ByteArray -> it.encode(key, value)
                is Nothing -> return@let
            }
        }
    }

     fun removeKey() = mMkv.removeValueForKey(key)

     fun cleanAllMMKV() = mMkv.clearAll()
}

3.SpUtils使用Preference

object SpUtils {
    const val KEY_TOKEN = "token"
    const val KEY_PHONE = "phone"
    const val KEY_USER_ID = "user_id"

    var token by Preference(KEY_TOKEN, "")
    var phone by Preference(KEY_PHONE, "")
    var userId by Preference(KEY_USER_ID, "")

    fun removeByKey(key:String){
        Preference(key, "").removeKey()
    }

    fun removeByKey(){
        Preference("", "").cleanAllMMKV()
    }
}

4.代码使用

保存数据:

SpUtils.phone= "13111113113"

读取数据:

val phone = SpUtils.phone

删除数据:

SpUtils.removeByKey(SpUtils.KEY_PHONE)

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-08-12 16:42:49  更:2021-08-12 16:43:34 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 5:21:28-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码