使用kotlin特性簡單封裝SharedPreferences

使用方法

object AccountBiz{
    var username by defSP("")
    var mobil:String by defSP("mobil", "")
}
//取值
val name=AccountBiz.username
//存值
AccountBiz.username="aaaaa"

SPUtil實現(xiàn)

const val SPFileName = "Setting"
/**
 * 使用defSP的話key為""在SPUtil中key會賦值成變量名
 * 所以一般用這個
 */
inline fun <reified R, T> R.defSP(default: T) = defSP("", default)
/**
 * 指定key用這個
 */
inline fun <reified R, T> R.defSP(key: String, default: T) = SPUtil(key, default, R::class.java.name)

class SPUtil<T>(val key: String, val defValue: T, val fileName: String = SPFileName) : ReadWriteProperty<Any?, T> {
    val sp by lazy {
        appContext.getSharedPreferences(fileName, Context.MODE_PRIVATE)
    }

    override fun getValue(thisRef: Any?, property: KProperty<*>): T {
        val temKey = if (key.isEmpty()) property.name else key
        return when (defValue) {
            is String -> sp.getString(temKey, defValue)
            is Boolean -> sp.getBoolean(temKey, defValue)
            is Int -> sp.getInt(temKey, defValue)
            is Float -> sp.getFloat(temKey, defValue)
            is Long -> sp.getLong(temKey, defValue)
            else -> throw IllegalArgumentException("類型錯誤")
        } as T
    }

    override fun setValue(thisRef: Any?, property: KProperty<*>, value: T) {
        val temKey = if (key.isEmpty()) property.name else key
        with(sp.edit()) {
            when (value) {
                is String -> putString(temKey, value)
                is Boolean -> putBoolean(temKey, value)
                is Int -> putInt(temKey, value)
                is Float -> putFloat(temKey, value)
                is Long -> putLong(temKey, value)
                else -> throw IllegalArgumentException("類型錯誤")
            }
            commit()
        }
    }
}

fun cleanSP(fileName: String = SPFileName) {
    appContext.getSharedPreferences(fileName, Context.MODE_PRIVATE).edit().clear().commit()
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一個完整的銷售流程包括四個階段:開場、調(diào)查(發(fā)現(xiàn)客戶需求)、能力展示(展示你有能力滿足客戶的需求),以及獲得客戶承...
    旅行邦mikle閱讀 626評論 0 0
  • 由于項目中嵌套html5頁面的需求越來越多,大家通常會使用android自帶webview,這對于一些簡單的頁面沒...
    MardaWang閱讀 5,244評論 0 2
  • 說實話 幺兒斷了奶之后 我抽煙的頻率是越來越大了 真的發(fā)現(xiàn)一心煩 心情不好 就會依賴上香煙這種東西 每天孩子的吃喝...
    Xiaoruinxx閱讀 918評論 0 0
  • 一 假期的意義對于我們來說,無非就是在熟悉的老地方陪伴父母和好友相聚。這似乎成了外出求學(xué)以來的固定形式。但今年的端...
    夏筠若閱讀 339評論 0 0

友情鏈接更多精彩內(nèi)容