SharedPreferences.Editor.commit()返回true,但未将更改写入持久存储

时间:2019-01-31 17:50:53

标签: android sharedpreferences

我正在编写一个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),我可以确认从未写入更改永久存储,这与文档中的内容相矛盾。

有人遇到过这个问题吗?是什么原因造成的?我该如何解决?

0 个答案:

没有答案