【发布时间】:2018-08-30 21:48:50
【问题描述】:
我试图在我的应用关闭时保存 TextView 的文本内容,因此我试图将该信息保存在 onDestroy 方法中,然后将它们设置在 onCreate 方法中。
我编写了以下 2 个函数来摆脱在共享首选项中获取和放置值的样板:
fun MainActivity.putStringInPrefs(prefsFile: String, key: String, value: Any) =
getSharedPreferences(prefsFile, Context.MODE_PRIVATE)
.edit()
.putString(key, value.toString())
.apply()
fun MainActivity.getStringFromPrefs(prefsFile: String, key: String, default: Any = "") : String =
getSharedPreferences(prefsFile, Context.MODE_PRIVATE).getString(key, default.toString())
当应用关闭时,这就是所谓的:
override fun onDestroy() {
super.onDestroy()
log("OnDestroy!")
putStringInPrefs(mainPrefsFile, "lastSelectedItemDescription", textViewItemDetailsTextView.text) }
log 只是Log.d("", "string") 的包装
在onCreate 中,它被调用:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) ; log("OnCreate!")
setContentView(R.layout.activity_main)
// Set up the item details text view
textViewItemDetailsTextView.text = getStringFromPrefs(mainPrefsFile, "lastSelectedItemDescription", detailsText)
问题是无论我做什么,首选项都不会保存,默认值总是在onCreate 中返回。无论有无明确,我都尝试过申请和提交。没有结果。我做错了什么。
【问题讨论】:
-
不是您的问题的直接答案,但您可以考虑使用新的 Android KTX,它是共享偏好“包装器”(github.com/android/android-ktx)
-
@JohnO'Reilly 谢谢!这似乎很有用,但我才开始玩 android,所以我想先弄脏我的手,然后再把它抽象出来以适应事物的方式。但是,非常感谢!
-
你应该通过不使用扩展函数来简化你的代码,而是直接在你的Activity中实现方法
putStringInPrefs和getStringFromPrefs。您还可以删除 prefsFile 参数并将其替换为字符串常量,因为您将始终从同一个地方读取和写入您的密钥,以避免混淆
标签: java android serialization kotlin sharedpreferences