在Kotlin中,使用
SharedPreferences
可以通过以下方式简化。
class Prefs(context: Context) {
companion object {
private const val PREFS_FILENAME = "app_prefs"
private const val KEY_MY_STRING = "my_string"
private const val KEY_MY_BOOLEAN = "my_boolean"
private const val KEY_MY_ARRAY = "string_array"
}
private val sharedPrefs: SharedPreferences =
context.getSharedPreferences(PREFS_FILENAME, Context.MODE_PRIVATE)
var myString: String
get() = sharedPrefs.getString(KEY_MY_STRING, "") ?: ""
set(value) = sharedPrefs.edit { putString(KEY_MY_STRING, value) }
var myBoolean: Boolean
get() = sharedPrefs.getBoolean(KEY_MY_BOOLEAN, false)
set(value) = sharedPrefs.edit { putBoolean(KEY_MY_BOOLEAN, value) }
var myStringArray: Array<String>
get() = sharedPrefs.getStringSet(KEY_MY_ARRAY, emptySet())?.toTypedArray()
?: emptyArray()
set(value) = sharedPrefs.edit { putStringSet(KEY_MY_ARRAY, value.toSet()) }
这里提供的 sharedPrefs.edit{...}
是由Android Core KTX库提供的,并且应该通过在应用程序级别 build.gradle
中添加依赖项implementation "androidx.core:core-ktx:1.0.2"
来实现。
您可以使用以下代码获取 SharedPreferences
的实例:
val prefs = Prefs(context)
此外,您可以创建
Prefs
的
Singleton
对象,并在应用程序的任何地方使用。
val prefs: Prefs by lazy {
Prefs(App.instance)
}
在AndroidManifest.xml
中应包含App
,该类扩展自Application
App.kt
class App:Application() {
companion object {
lateinit var instance: App
}
override fun onCreate() {
super.onCreate()
instance = this
}
}
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest .....
<application
android:name=".App"
....
例子用法:
val myString = prefs.myString
prefs.myString = "My String Value"
val myStringArray = prefs.myStringArray
prefs.myStringArray = arrayOf("String 1","String 2","String 3")
context.getSharedPreferences(“com.example.app”,Context.MODE_PRIVATE);
中。实际上,您可以尝试并比较适用于您情况的方式。也许对您来说一个文件不会影响性能。但是,将逻辑分为小而易懂的部分始终是更好的选择。 - Yakiv Mospanapply()
更安全,因为您不知道它是否成功完成。如果失败,您的更改将不会保存到磁盘。 - Yakiv Mospancommit()
替换为apply()
。对于不同的线程,根据文档,最后调用的commit()
或apply()
将被视为有效值,无论您在一个进程中使用哪个线程,所有的commit()
和apply()
调用都会排队,并且只有最后一个将被应用。 - Yakiv Mospan