告别需要定义key的烦恼,几行代码轻松接入使用,支持 sharedpreference mmkv 等持久化方案,支持跨模块调用
工程根目录build.gradle添加
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath("com.wrbug.kv:kv-gradle:${kvVersion}")
}
}
宿主工程和module build.gradle添加
//plugin仅宿主工程启用即可
apply plugin: 'com.wrbug.kv.gradle'
dependencies {
implementation "com.wrbug.kv:kv:${kvVersion}"
kapt "com.wrbug.kv:kv-compile:${kvVersion}"
}
@KVMultiModule
class App : Application() {
override fun onCreate() {
super.onCreate()
KV.init(this)
}
}
@KVMultiModule
仅用于标记主工程,可以在主工程任意类添加该注解
@KV
interface AccountLocalSource {
fun setUsername(username:String)
fun getUsername():String
fun setAge(age:Int)
fun getAge(defaultAge:Int):Int
fun removeUsername()
fun clear()
}
定义规则参考Interface方法名匹配规则
//获取AccountLocalSource实例
val source = KV.get(AccountLocalSource::class.java)
//存储id
source?.setUsername("WrBug")
//获取id
val username=source?.getUsername()
//删除username
source?.removeUsername()
//支持自定义key,scope,key默认为类名,scope默认为空字符串
@KV("key",scope="scope")
interface AccountLocalSource {
//@KVAliasName可自定义持久化key
@KVAliasName("uid")
fun setUserId(uid:Long)
//匹配set开头的方法,xxx为持久化的key
//传参仅支持一个,可以为任意类型,复杂对象类型通过 ObjectConverter 转换为可存储类型
fun setXXX(username:String)
//匹配@KVPut注解
@KVPut("xxx")
fun saveXXX(obj:Any)
//匹配get开头的方法,xxx为持久化的key,返回类型应与set方法传参一致
fun getXXX():String
//get方法支持默认值
fun getXXX(defaultAge:Int):Int
//匹配@KVGet注解
@KVGet("xxx")
fun fetchXXX():Any
//匹配remove方法,移除该key
fun removeXXX()
@KVRemove("xxx")
fun deleteXXX()
//匹配clear方法,清空所有数据
fun clear()
@KVClear
fun removeAll()
}
DataProvider
用于实现储存策略。默认SharedPreferenceDataProvider
使用SharedPreference储存,业务方可以根据需要自行实现DataProvider,目前仅支持一个自定义DataProvider
@KVDataProvider
class CustomDataProvider : DataProvider{
//impl
}
Demo 提供了MMKVDataProvider
的实现可供参考
ObjectConverter
用于对复杂对象存储转换,默认使用JsonObjectConverter
转为json存储
object CustomObjectConverter : ObjectConverter {
//impl
}
//应在初始化完成后设置
KV.setObjectConverter(CustomObjectConverter)