安卓笔记-SharedPreferences存储封装

SharedPreferences存储封装,便于开发,使用单例模式,同时使用contentProvider来获取全局上下文,所以在使用中无需传递上下文。
为了更加简单的操作(毕竟是懒人)使用了kotlin里面的委托来实现更简单的操作,此文仅用于本人记录开发经验所用。
代码如下

/**
 *@author Chord.p
 *@time 2019-12-31 16:08
 *speak softly love
 */
class SharedHelper {
//使用contentProvider获取全局上下文
    var helper : SharedPreferences = ChordProvider.mContext!!.getSharedPreferences("Config_Chord", Context.MODE_PRIVATE)
    var editer: SharedPreferences.Editor = helper.edit()

    companion object {
        private val instance : SharedHelper by lazy { SharedHelper() }
        
        fun <E> put(key : String,element : E) {
            when (element) {
                is Int -> {
                    instance.editer.putInt(key,element)
                    instance.editer.commit()
                }
                is String -> {
                    instance.editer.putString(key,element)
                    instance.editer.commit()
                }
                is Boolean -> {
                    instance.editer.putBoolean(key,element)
                    instance.editer.commit()
                }
                is Long -> {
                    instance.editer.putLong(key,element)
                    instance.editer.commit()
                }
                is Float -> {
                    instance.editer.putFloat(key,element)
                    instance.editer.commit()
                }
            }
        }

        fun <E> get(key : String,default : E) : E {
            when(default) {
                is Int -> {
                    return instance.helper.getInt(key,default) as E
                }
                is String -> {
                    return instance.helper.getString(key,default) as E
                }
                is Boolean -> {
                    return instance.helper.getBoolean(key,default) as E
                }
                is Long -> {
                    return instance.helper.getLong(key,default) as E
                }
                is Float -> {
                    return instance.helper.getFloat(key,default) as E
                }
                else -> {
                    return default
                }
            }
        }
    }
}

kotlin委托封装SharedPreferences操作代码如下

    class SharedDelegation <V> (private val key: String,private val default : V) : ReadWriteProperty<Any?,V> {

        override fun getValue(thisRef: Any?, property: KProperty<*>): V {
            return SharedHelper.get(key,default)
        }

        override fun setValue(thisRef: Any?, property: KProperty<*>, value: V) {
            if (null != value && null == value) {
                SharedHelper.put(key,value)
            }else {
                SharedHelper.put(key,default)
            }
        }
    }

使用方法如下

var test  by SharedDelegation("key","default value")

另外需要说一个SharedPreferences的一个坑,SharedPreferences在存储SringSet类型的时候如果直接putStingSet然后commit的话是无法存储的,如果一定要存储StringSet的话,那么在putStingSet之后再用SharedPreferences存一个基本类型的值,比如(Int/Boolean啥的,String也可以)然后commit就可以了,如果不是必要的话,建议转成String型的存储就好了。

发布了6 篇原创文章 · 获赞 0 · 访问量 82

猜你喜欢

转载自blog.csdn.net/u011997929/article/details/105088949