我正在编写一个Android应用程序,并且必须将StringSet保存为SharedPreference。 相关代码如下:
dialog.setButton(DialogInterface.BUTTON_POSITIVE, if (remove) "Entfernen" else "Hinzufügen") { _, _ ->
val courses = prefs.getStringSet("filters", mutableSetOf())!!
if (remove) {
if (!courses.remove(course)) {
Toast.makeText(activity, "Konnte \"$course\" nicht entfernen", Toast.LENGTH_LONG).show()
return@setButton
}
} else if (!courses.add(course)) {
Toast.makeText(activity, "Konnte \"$course\" nicht hinzufügen", Toast.LENGTH_LONG).show()
return@setButton
}
dialog.dismiss()
val editor = prefs.edit()
editor.putStringSet("filters", courses)
Log.d("RecyclerViewAdapter", "Committed changed prefs: ${editor.commit()}") //TODO("doesn't apply permanently")
Toast.makeText(activity, "\"$course\" ${if (remove) "aus Filterliste entfernt" else "zu Filterliste hinzugefügt"}", Toast.LENGTH_SHORT).show()
}
Logcat的输出如下所示:
RecyclerViewAdapter: Committed changed prefs: true
在documentation中写道:
如果新值已成功写入持久性存储,则返回true。
因此,我将假定更改已写入持久性存储,并且在同一应用程序进程中请求SharedPreference时,更改就在那里。
但是,如果我重新启动应用程序,则SharedPreference再次具有其原始值,并且通过检查存储SharedPreferences的文件(/data/data/[AppID]/shared_prefs/[AppID]_preferences.xml
),我可以确认从未写入更改永久存储,这与文档中的内容相矛盾。
有人遇到过这个问题吗?是什么原因造成的?我该如何解决?