From c4e8f598785dedf911e943a5ffaae28e6a1d9d20 Mon Sep 17 00:00:00 2001 From: luyao Date: Mon, 8 Jul 2019 17:01:51 +0800 Subject: [PATCH] =?UTF-8?q?fix(sp)=20:=20=E6=8C=87=E5=AE=9A=20sharedprefer?= =?UTF-8?q?ences=20=E6=96=87=E4=BB=B6=E5=90=8D=E7=A7=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../util/ktx/ui/SharedPreferencesActivity.kt | 16 +++-- .../res/layout/activity_sharedperferences.xml | 5 ++ .../util/ktx/ext/sp/SharedPreferencesExt.kt | 65 +++++++++++-------- 3 files changed, 55 insertions(+), 31 deletions(-) diff --git a/app/src/main/java/luyao/util/ktx/ui/SharedPreferencesActivity.kt b/app/src/main/java/luyao/util/ktx/ui/SharedPreferencesActivity.kt index c58e3d1..5c17b00 100644 --- a/app/src/main/java/luyao/util/ktx/ui/SharedPreferencesActivity.kt +++ b/app/src/main/java/luyao/util/ktx/ui/SharedPreferencesActivity.kt @@ -23,6 +23,7 @@ class SharedPreferencesActivity : BaseActivity() { override fun initData() { + putInt.setOnClickListener { putSpValue("int", 1) toast(getSpValue("int", 0).toString()) @@ -33,7 +34,7 @@ class SharedPreferencesActivity : BaseActivity() { } putBoolean.setOnClickListener { putSpValue("boolean", true) - toast(getSpValue("boolean", false).toString()) + toast(getSpValue(key = "boolean", default = false).toString()) } putString.setOnClickListener { putSpValue("string", "ktx") @@ -47,9 +48,16 @@ class SharedPreferencesActivity : BaseActivity() { putSpValue("tag1", 1) putSpValue("tag2", false) putSpValue("tag3", Person("bingxin", 1)) - toast("${getSpValue("tag1",0)}\n" + - "${getSpValue("tag2",true)}\n" + - "${getSpValue("tag3",Person("default",0))}") + toast( + "${getSpValue("tag1", 0)}\n" + + "${getSpValue("tag2", true)}\n" + + "${getSpValue("tag3", Person("default", 0))}" + ) + } + + putAnotherFile.setOnClickListener { + putSpValue("another","from another sp file",name = "another") + toast(getSpValue("another","null",name = "another")) } } } \ No newline at end of file diff --git a/app/src/main/res/layout/activity_sharedperferences.xml b/app/src/main/res/layout/activity_sharedperferences.xml index 787e72a..7f8139d 100644 --- a/app/src/main/res/layout/activity_sharedperferences.xml +++ b/app/src/main/res/layout/activity_sharedperferences.xml @@ -36,4 +36,9 @@ android:text="putMulti" style="@style/NormalButton"/> + + \ No newline at end of file diff --git a/ktx/src/main/java/luyao/util/ktx/ext/sp/SharedPreferencesExt.kt b/ktx/src/main/java/luyao/util/ktx/ext/sp/SharedPreferencesExt.kt index ab24890..d8f3a33 100644 --- a/ktx/src/main/java/luyao/util/ktx/ext/sp/SharedPreferencesExt.kt +++ b/ktx/src/main/java/luyao/util/ktx/ext/sp/SharedPreferencesExt.kt @@ -23,49 +23,60 @@ inline fun SharedPreferences.edit(commit: Boolean = false, action: SharedPrefere editor.apply() } -fun Context.sp(name: String = packageName, mode: Int = Context.MODE_PRIVATE) = +fun Context.sp(name: String = packageName, mode: Int = Context.MODE_PRIVATE): SharedPreferences = getSharedPreferences(name, mode) -fun Activity.sp(name: String = packageName, mode: Int = Context.MODE_PRIVATE) = +fun Activity.sp(name: String = packageName, mode: Int = Context.MODE_PRIVATE): SharedPreferences = getSharedPreferences(name, mode) -fun Context.putSpValue(name: String, value: T) = sp().edit { +fun Context.putSpValue(name: String = packageName, key: String, value: T) = sp(name).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 -> putString(name, serialize(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, serialize(value)) } } -fun Activity.putSpValue(name: String, value: T) = sp().edit { +fun Activity.putSpValue(key: String, value: T, name: String = packageName) = sp(name).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 -> putString(name, serialize(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, serialize(value)) } } -fun Context.getSpValue(key: String, default: T) :T{ - sp().run { - val result = when (default) { - is Long -> getLong(key, default) - is String -> getString(key, default) - is Int -> getInt(key, default) - is Boolean -> getBoolean(key, default) - is Float -> getFloat(key, default) - else -> deSerialization(getString(key, serialize(default))) - } - return result as T +fun Context.getSpValue(key: String, default: T, name: String = packageName ): T = sp(name).run { + val result = when (default) { + is Long -> getLong(key, default) + is String -> getString(key, default) + is Int -> getInt(key, default) + is Boolean -> getBoolean(key, default) + is Float -> getFloat(key, default) + else -> deSerialization(getString(key, serialize(default))) } + result as T } +fun Activity.getSpValue(key: String, default: T, name: String = packageName): T = sp(name).run { + val result = when (default) { + is Long -> getLong(key, default) + is String -> getString(key, default) + is Int -> getInt(key, default) + is Boolean -> getBoolean(key, default) + is Float -> getFloat(key, default) + else -> deSerialization(getString(key, serialize(default))) + } + return result as T +} + + private fun serialize(obj: T): String { val byteArrayOutputStream = ByteArrayOutputStream() val objectOutputStream = ObjectOutputStream(