提问人:Peter Horvath 提问时间:12/30/2022 更新时间:12/30/2022 访问量:205
Android 共享首选项、Kotlin
Android shared preference, Kotlin
问:
我有以下简单的代码。它采用文本框的值,保存并检索。 检索到的值与保存的值不同。
打印输出: 值:qwert 阿斯达夫
可能是什么问题?
val sharedPref = getSharedPreferences("Data", Context.MODE_PRIVATE)
sharedPref.edit().putString("Str",binding.text.editText?.text.toString())
print("Value: ")
println(binding.text.editText?.text.toString())
sharedPref.edit().commit()
println(sharedPref.getString("Str","asdf"))
感谢您提前提供任何提示
答:
2赞
Some random IT boy
12/30/2022
#1
SharedPreferences#edit
将一个类的实例交给您,您正在该类上调用该方法,但您没有在该实例上提交任何更改。SharedPreferences.Editor
putString
你的第二个只是得到一个没有任何版本的新实例,并且调用没有任何变化。sharedPref.edit().commit()
SharedPreferences.Editor
commit
请尝试以下操作
val editor = sharedPrefs.editor()
editor.putString("key", "value")
editor.commit()
return sharedPrefs.getString("key", "defaultValue")
一种更惯用的方法是使用 kotlin stdlib 中的函数:apply
sharedPrefs.edit().apply {
putString("key", "value")
commit()
}
评论
0赞
MichiBros
12/30/2022
此外,由于 apply() 是异步的,它可能不会立即显示保存的值。但我怀疑这会成为实际应用程序实现的问题。
0赞
Some random IT boy
12/30/2022
我的意思是来自 kotlin 的 stdlib,但你是对的。您可以使用(异步)或同步来保存更改。提出来的好点apply
SharedPreferences.Editor#apply
SharedPreferences.Editor#commit
1赞
Tenfour04
12/30/2022
@MichiBros,apply() 在 SharedPreferences 的内存实例上是同步的,因此该值肯定可以立即使用,但在 apply() 返回时不一定会写入磁盘。
0赞
jcredking
12/30/2022
#2
你也可以像这样试试
//For Add String Value in sharedPreferences
val sharedPreferences = getSharedPreferences("key", MODE_PRIVATE) ?: return
with(sharedPreferences.edit()) {
putString("yourStringKey", "Hello World")
apply()
}
//Here get enter string value from sharedPreferences other activity
val sharedPreferences1 = getSharedPreferences("key", MODE_PRIVATE) ?: return
val string = sharedPreferences1.getString("yourStringKey", "hi") //"hi" is default value
Log.e("sharedPreferences1", "sharedPreferences1 Val is -->> $string")
有关更多信息,您可以在此处参考官方 android 文档
评论