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()
}
}