Skip to content
/ kv Public

🔥一款Android端基于注解的0反射的持久化存储封装

License

Notifications You must be signed in to change notification settings

WrBug/kv

Folders and files

NameName
Last commit message
Last commit date

Latest commit

c6acca4 · Jan 20, 2022

History

40 Commits
Jan 19, 2022
Jan 18, 2022
Jan 19, 2022
Jan 19, 2022
Dec 31, 2021
Dec 31, 2021
Jan 18, 2022
Jan 18, 2022
Dec 30, 2021
Dec 21, 2021
Jan 20, 2022
Jan 19, 2022
Jan 19, 2022
Dec 21, 2021
Dec 21, 2021
Jan 18, 2022
Dec 31, 2021

Repository files navigation

KV 一款Android端基于注解的0反射的持久化存储封装

license Maven Central

告别需要定义key的烦恼,几行代码轻松接入使用,支持 sharedpreference mmkv 等持久化方案,支持跨模块调用

快速接入

接入

KV最新版本: Maven Central

工程根目录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 仅用于标记主工程,可以在主工程任意类添加该注解

快速使用

新增Interface

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

更多扩展

Interface方法名匹配规则

//支持自定义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

DataProvider用于实现储存策略。默认SharedPreferenceDataProvider 使用SharedPreference储存,业务方可以根据需要自行实现DataProvider,目前仅支持一个自定义DataProvider

@KVDataProvider
class CustomDataProvider : DataProvider{
    //impl
}

Demo 提供了MMKVDataProvider的实现可供参考

自定义ObjectConverter

ObjectConverter用于对复杂对象存储转换,默认使用JsonObjectConverter转为json存储

object CustomObjectConverter : ObjectConverter {
    //impl
}

//应在初始化完成后设置
KV.setObjectConverter(CustomObjectConverter)

About

🔥一款Android端基于注解的0反射的持久化存储封装

Resources

License

Stars

Watchers

Forks

Packages

No packages published