美文网首页
Kotlin学习笔记——SharedPreference

Kotlin学习笔记——SharedPreference

作者: Jingtianer | 来源:发表于2019-04-12 23:19 被阅读0次
        #define 小毛驴 xml
        #define SPS SharedPreferences
    

    知识补充

    模板类

    1. Any类——相当于java中的Object类
    2. <*>——相当于java中的<?>表示不同于模板类的T

    委托属性

    待补充

    lazy修饰符

    让变量在首次使用的时候赋值

    • lateinit的区别:
      • lateinit是在创建变量时不赋值,想编译器保证在使用之前会赋值,这样这个变量仍然会被当做非空变量
      • lazy是创建变量时"赋值",但是真正赋值是在首次使用的时候才赋值

    with函数

        with(函数头语句){函数体语句}
    
    • 函数头语句先于函数体语句执行,函数头语句会返回一个值
    • 函数体语句会在头语句的返回对象的命名空间中执行,体语句可以直接调用头部返回的类的方法

    使用场景

    SharedPreferences是Android中最简单的数据储存方式

    使用方法

    方法一览

    SharedPreferences类的方法(注意最后有一个s)

    方法 参数 解释
    getSharedPreferences String + MODD 初始化一个SPS。第一个String是文件名,与str.xml文件共享参数。第二个参数是参数的操作模式,是Context类中的静态常量(这个函数不是SPS的方法,是Context的,但是为了方便起见写在这里)
    getString key-value obviously
    getInt key-value obviously
    getBoolean key-value obviously
    getFloat key-value obviously
    getLong key-value obviously

    编写一个Util类

    class SharedPreferencesUtil<T>(val context: Context, val name:String, val default:T) : ReadWriteProperty<Any?, T> {
        val prefs: SharedPreferences by lazy {
            context.getSharedPreferences("default", Context.MODE_PRIVATE)
        }
    
    
        override fun getValue(thisRef: Any?, property: KProperty<*>): T {
            return findPreference(name, default)
        }
    
        override fun setValue(thisRef: Any?, property: KProperty<*>, value: T) {
            putPreference(name, value)
        }
    
        private fun findPreference(name:String, default: T) : T  = with(prefs){
            return when (default) {
                is Long -> getLong(name, default)
                is String -> getString(name, default)
                is Int -> getInt(name, default)
                is Boolean -> getBoolean(name, default)
                is Float -> getFloat(name, default)
                else -> throw IllegalArgumentException("Unsupport type")
            } as T
        }
    
        private fun <T> putPreference(name:String, value:T) = with(prefs.edit()) {
            when (value) {
                is Long -> putLong(name, value)
                is String -> putString(name, value)
                is Int -> putInt(name, value)
                is Boolean -> putBoolean(name, value)
                is Float -> putFloat(name, value)
                else -> throw IllegalArgumentException("Unsupport type")
            }.apply()
            //commit和apply都表示提交
            //应该是对when-else语句的返回值调用apply方法
        }
    
    }
    

    使用

        var name:String by SharedPreferencesUtil(this, "name", "")
        var age:Int by SharedPreferencesUtil(this, "age", 0)
        var marriage:Boolean by SharedPreferencesUtil(this, "marriage", true)
        //以上三个变量就被“本地化”保存了
    

    相关文章

      网友评论

          本文标题:Kotlin学习笔记——SharedPreference

          本文链接:https://www.haomeiwen.com/subject/mfdkwqtx.html