SharedPreferences haben die Methode getAll, geben jedoch keine Einträge zurück, obwohl einige Schlüssel vorhanden sind:
PreferenceManager.getDefaultSharedPreferences(this).contains("addNewAddress");
gibt true zurück
Map<String, ?> keys=PreferenceManager.getDefaultSharedPreferences(this).getAll();
Gibt eine leere Karte zurück
Was ist falsch? Wie erhalte ich eine Liste aller freigegebenen Einstellungen?
android
sharedpreferences
Eugene Chumak
quelle
quelle
getAll()
kannNULL
Wert zurückgeben. Es wäre besser,keys
nach NULL zu suchen.entry.getValue()
alsentry.getValue().toString()
nicht NullPointerException zu bekommen)Ich denke, die Frage hat mehr damit zu tun, warum
PreferenceManager.getDefaultSharedPreferences(this).getAll()
gibt eine leere / widersprüchliche Karte zurück, als wenn über eine Standard-Java-Karte iteriert wird. Das Android-Dokument ist nicht wirklich klar, was hier vor sich geht, aber im Grunde scheint es der erste Anruf überhaupt zu sein
PreferenceManager.setDefaultValues(this, R.xml.preferences,false)
- Dies ist das, was Sie aufrufen sollten, um die Einstellungen beim Starten Ihrer App zu initialisieren. - Erstellt eine zwischengespeicherte Version Ihrer Einstellungen, die dazu führt, dass zukünftige Änderungen an Ihrer XML-Einstellungsdatei inkonsistent behandelt werden, dh dass Sie nicht übereinstimmen in Ihrer Frage beschrieben.
Führen Sie die folgenden Schritte aus, um diese "zwischengespeicherte Entität" zurückzusetzen (die Sie über den obigen Link finden können):
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); prefs.edit().clear(); PreferenceManager.setDefaultValues(this, R.xml.preferences, true);
quelle
falls jemand durch gemeinsame Einstellungen in KOTLIN iterieren möchte
sharedPreferences?.all?.forEach { //access key using it.key & value using it.value Log.d("Preferences values",it.key() + ": " + it.value() }
quelle