MMKV使用及簡單封裝-kotlin
- MMKV使用
- 依賴注入
- 初始化
- 實體化和使用
- 其他
- SharedPreferences資料遷移
- 簡單封裝
- 結束
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()
}
}
結束
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/271595.html
標籤:其他
上一篇:flutter,報錯Invalid `Podfile` file: cannot load such file -- ../xxxProject/...
下一篇:View事件分發
