Kotlin-SharedPreferences工具类
使用到SharedPreferences、Gson、内联函数、泛型、reified. implementation “com.google.code.gson:gson:$google_gson” google_gson = 2.8.5
object SpHelper {
val sp: SharedPreferences by lazy {
ContextUtil.getAppContext().getSharedPreferences("default", Context.MODE_PRIVATE)
}
fun put(@NotNull key: String, @NotNull value: Any) = with(sp.edit()) {
when (value) {
is Long -> putLong(key, value)
is String -> putString(key, value)
is Int -> putInt(key, value)
is Boolean -> putBoolean(key, value)
is Float -> putFloat(key, value)
else -> putString(key, GsonUtil.toJson(value))
}.apply()
}
fun find(@NotNull key: String): Boolean {
return sp.contains(key)
}
/**
* 内联函数使用的方法和属性的权限修饰符必须是public
* */
inline fun <reified T> get(@NotNull key: String, default: T): T {
if (!find(key)) return default;
return with(sp) {
when (default) {
is Int -> getInt(key, default) as T
is Long -> getLong(key, default) as T
is Float -> getFloat(key, default) as T
is Boolean -> getBoolean(key, default) as T
is String -> getString(key, default) as T
else -> GsonUtil.fromJson2Object(getString(key, ""), T::class.java)
}
}
}
fun remove(@NotNull key: String): Boolean {
if (!find(key)) return true
sp.edit().remove(key).apply()
return true
}
fun clear() {
sp.edit().clear().apply()
}
}
object GsonUtil {
private val gson: Gson by lazy {
GsonBuilder()
.setDateFormat("yyyy-MM-dd HH:mm:ss").create()
}
private val prettyGson: Gson by lazy {
GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss")
.setPrettyPrinting()
.create()
}
/**
* 小写下划线的格式解析JSON字符串到对象
*
* 例如 is_success->isSuccess
*
* @param json
* @param classOfT
* @return
*/
fun <T> fromJsonUnderScoreStyle(json: String?, classOfT: Class<T>?): T {
return gson.fromJson(json, classOfT)
}
/**
* JSON字符串转为Map<String></String>,String>
*
* @param json
* @return
*/
fun <T> json2Map(json: String?): T {
return gson.fromJson(json, object : TypeToken<Map<String?, String?>?>() {
}.type)
}
/**
* 小写下划线的格式将对象转换成JSON字符串
*
* @param src
* @return
*/
fun toJson(src: Any?): String {
return gson.toJson(src)
}
fun toJson(src: Any?, writer: Appendable?) {
gson.toJson(src, writer)
}
fun toPrettyString(src: Any?): String {
return prettyGson.toJson(src)
}
fun <T> fromJson2Object(src: String?, t: Class<T>?): T {
return gson.fromJson(src, t)
}
fun <T> fromJson2Object(src: String?, typeOfT: Type?): T {
return gson.fromJson(src, typeOfT)
}
fun <T> fromJson2Object(reader: Reader?, typeOfT: Type?): T {
return gson.fromJson(reader, typeOfT)
}
fun <T> fromJson2Object(reader: Reader?, t: Class<T>?): T {
return gson.fromJson(reader, t)
}
}
调用
private fun getUserInfoFromLocal(): UserInfo {
return SpHelper.get(ConstPool.SP_USER_INFO,UserInfo())
}
fun saveUserInfoToLocal(data: UserInfo) {
SpHelper.put(ConstPool.SP_USER_INFO,data)
}
