Wie bekomme ich alle Schlüssel in SharedPreferences
, nicht nur den Wert der Vorzugstaste?
prefA = getSharedPreferences("MyAttack", MODE_PRIVATE);
prefB= getSharedPreferences("MySkill", MODE_PRIVATE);
SharedPreferences
hat die Methode getAll()
, die einen Map<String, ?>
zurückgibt. Von der Map können Sie die Schlüssel mit keySet()
und die Schlüssel/Wert-Zuordnungen mit entrySet()
leicht abrufen:
Map<String, ?> allEntries = prefA.getAll();
for (Map.Entry<String, ?> entry : allEntries.entrySet()) {
Log.d("map values", entry.getKey() + ": " + entry.getValue().toString());
}
Sie können die getAll () - Methode von SharedPreferences verwenden und alle Werte in Map abrufen. Anschließend können Sie sie leicht durchlaufen:
Map<String,?> keys = prefs.getAll();
for(Map.Entry<String,?> entry : keys.entrySet()){
Log.d("map values",entry.getKey() + ": " + entry.getValue().toString());
}
Für weitere Informationen können Sie die Dump () - Implementierung von PrefUtil.Java mit diesem link überprüfen.
Verwenden Sie die getAll () - Methode von Android.content.SharedPreferences
.
Map<String, ?> map = sharedPreferences.getAll();
Schauen Sie sich den folgenden Code für die getAll()
-Methode an
Map<String, ?> prefsMap = prefA.getAll();
for (Map.Entry<String, ?> entry: prefsMap.entrySet()) {
Log.v("SharedPreferences", entry.getKey() + ":" +
entry.getValue().toString());
}
Mit Kotlin können Sie alle SharedPreferences-Schlüssel mit nur einer Zeile erhalten, indem Sie Map verwenden.
Prost, Kumpel ????
val sharedPreferences = context.getSharedPreferences("SHARED_PREFERENCES", Context.MODE_PRIVATE)
val sharedPreferenceIds = sharedPreferences.all.map { it.key } //returns List<String>
Nachdem ich die Antwort von @Delacrix gelesen und mit dem Kotlin-Weg (getestet in Kotlin 1.3.11) die Schlüssel abgerufen hatte, fand ich eine noch kürzere Version für den Abruf der Schlüssel (oder sogar die Werte):
val prefsA = context.getSharedPreferences("MyAttack", Context.MODE_PRIVATE)
val prefsAIDs = sharedPreferences.all.keys //returns MutableSet<String>
Auf die gleiche Weise können Sie nur über sharedPreferences.all.values
auf die Werte zugreifen (selbst wenn Sie nicht die Frage stellen, die Sie in Ihrer Frage gestellt haben, kann dies für andere Leser nützlich sein).
Obwohl die Antwort von @ Blackbelt hier sehr beliebt ist, ist sie meiner Meinung nach nicht auf die Frage ausgerichtet. (Es ist nicht überraschend, da die Frage die Terminologie der Namen und Schlüssel der Präferenzen durcheinander bringt.) Ich denke, die Frage ist, wie man herausfindet, welche Shared Preferences-Instanzen erstellt wurden. Dies kann von Interesse sein, wenn die Namen dynamisch erstellt werden.
Hier sind zwei Strategien dafür:
erstellen Sie eine weitere "Meta" -Instanz für gemeinsam genutzte Voreinstellungen, in der alle erstellten Voreinstellungen für gemeinsam genutzte Voreinstellungen registriert werden, indem Sie den Meta-Voreinstellungen ein Schlüssel-/Wert-Paar hinzufügen. true
.
getSharedPreferences( DYNAMIC_PREFS_NAME, 0 )
.edit().put*(*).apply();
getSharedPreferences( "meta_prefs_index", 0 )
.edit().putBoolean( DYNAMIC_PREFS_NAME, true).apply();
Um alle von Ihnen erstellten gemeinsamen Präferenzen zu erhalten, verwenden Sie die Meta-Präferenzen und folgen Sie der Antwort von @Blackbelt.
für freigegebene Voreinstellungen gibt es eine Sicherungsdatei, die im Ordner /data/data/YOUR_PACKAGE_NAME/shared_prefs
mit dem Namen YOUR_PREFS_NAME.xml
S gespeichert ist. Sie können also in diesem Verzeichnis nach freigegebenen Voreinstellungsdateien suchen. Aber seien Sie vorsichtig, es könnte freigegebene Voreinstellungsdateien geben, die nicht von Ihrer Logik erstellt wurden! Deshalb würde ich beim ersten Ansatz bleiben.