MMKV使用及简单封装-kotlin

MMKV使用

使用非常简单

依赖注入

// mmkv存储
implementation 'com.tencent:mmkv-static:1.2.7'

初始化

App记得调用

import android.app.Application
import com.tencent.mmkv.MMKV

/**
 * 作者: CQ
 * 日期: 2021-03-31
 * 说明:
 */
class App : Application() {
    override fun onCreate() {
        super.onCreate()
        // 1、可以修改目录的初始化 目录:/data/data/包名/files/mmkv
        // val path = filesDir.absolutePath + "/mmkv"
        // MMKV.initialize(path)
        
        //2、普通初始化 目录:/data/data/包名/files
        MMKV.initialize(this)
		// 1和2使用一个就可以了
    }
}

实例化和使用

		// 获取默认的全局实例
        val kv = MMKV.defaultMMKV()
        kv!!.encode("a", "a") // 写入
        kv.decodeString("a", "") // 读取

其他

		// 获取默认的全局实例
        val kv = MMKV.defaultMMKV()

        // 根据业务区别存储, 附带一个自己的 ID
        MMKV.mmkvWithID("ID_")

        // 多进程同步支持
        MMKV.mmkvWithID("ID_", MMKV.MULTI_PROCESS_MODE)

SharedPreferences数据迁移

        val kv = MMKV.mmkvWithID("ID_")
        val  oldData = getSharedPreferences("ID_", MODE_PRIVATE)
        // 迁移旧数据
        kv!!.importFromSharedPreferences(oldData);
        // 清空旧数据
        oldData.edit().clear().apply()

简单封装

import android.os.Parcelable
import com.tencent.mmkv.MMKV
import java.util.*
/**
 * 作者: CQ
 * 日期: 2021-03-30
 * 说明: 字段储存
 * 使用:需要MMKV.initialize(this)
 */
object SpUtils {
    var mmkv: MMKV? = null

    init {
       mmkv = MMKV.defaultMMKV()
    }
  
    fun put(key: String, value: Any?): Boolean {
        return when (value) {
            is String -> mmkv?.encode(key, value)!!
            is Float -> mmkv?.encode(key, value)!!
            is Boolean -> mmkv?.encode(key, value)!!
            is Int -> mmkv?.encode(key, value)!!
            is Long -> mmkv?.encode(key, value)!!
            is Double -> mmkv?.encode(key, value)!!
            is ByteArray -> mmkv?.encode(key, value)!!
            else -> false
        }
    }
    
 	/**
     * 这里使用安卓自带的Parcelable序列化,它比java支持的Serializer序列化性能好些
     */
    fun <T : Parcelable> put(key: String, t: T?): Boolean {
        if (t == null) {
            return false
        }
        return mmkv?.encode(key, t)!!
    }

    fun put(key: String, sets: Set<String>?): Boolean {
        if (sets == null) {
            return false
        }
        return mmkv?.encode(key, sets)!!
    }

    fun getInt(key: String): Int? {
        return mmkv?.decodeInt(key, 0)
    }

    fun getDouble(key: String): Double? {
        return mmkv?.decodeDouble(key, 0.00)
    }

    fun getLong(key: String): Long? {
        return mmkv?.decodeLong(key, 0L)
    }

    fun getBoolean(key: String): Boolean? {
        return mmkv?.decodeBool(key, false)
    }

    fun getFloat(key: String): Float? {
        return mmkv?.decodeFloat(key, 0F)
    }

    fun getByteArray(key: String): ByteArray? {
        return mmkv?.decodeBytes(key)
    }

    fun getString(key: String): String? {
        return mmkv?.decodeString(key, "")
    }

    /**
     * SpUtils.getParcelable<Class>("")
     */
    inline fun <reified T : Parcelable> getParcelable(key: String): T? {
        return mmkv?.decodeParcelable(key, T::class.java)
    }

    fun getStringSet(key: String): Set<String>? {
        return mmkv?.decodeStringSet(key, Collections.emptySet())
    }

    fun removeKey(key: String) {
        mmkv?.removeValueForKey(key)
    }

    fun clearAll() {
        mmkv?.clearAll()
    }

}

结束

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值