fix(sp) : 指定 sharedpreferences 文件名称

This commit is contained in:
luyao 2019-07-08 17:01:51 +08:00
parent 60bdfdf128
commit c4e8f59878
3 changed files with 55 additions and 31 deletions

View File

@ -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"))
}
}
}

View File

@ -36,4 +36,9 @@
android:text="putMulti"
style="@style/NormalButton"/>
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/putAnotherFile"
android:text="putAnotherFile"
style="@style/NormalButton"/>
</LinearLayout>

View File

@ -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 <T> Context.putSpValue(name: String, value: T) = sp().edit {
fun <T> 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 <T> Activity.putSpValue(name: String, value: T) = sp().edit {
fun <T> 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 <T> 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 <T> 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 <T> 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 <T> serialize(obj: T): String {
val byteArrayOutputStream = ByteArrayOutputStream()
val objectOutputStream = ObjectOutputStream(