Wie bekomme ich alle Schlüssel rein SharedPreferences
, nicht nur den Wert der Voreinstellung?
prefA = getSharedPreferences("MyAttack", MODE_PRIVATE);
prefB= getSharedPreferences("MySkill", MODE_PRIVATE);
Wie bekomme ich alle Schlüssel rein SharedPreferences
, nicht nur den Wert der Voreinstellung?
prefA = getSharedPreferences("MyAttack", MODE_PRIVATE);
prefB= getSharedPreferences("MySkill", MODE_PRIVATE);
Antworten:
SharedPreferences
hat die Methode getAll()
, die a zurückgibt Map<String, ?>
. Auf der Karte können Sie einfach die Schlüssel mit keySet()
und die Schlüssel- / Wertzuordnungen abrufen mit entrySet()
:
Map<String, ?> allEntries = prefA.getAll();
for (Map.Entry<String, ?> entry : allEntries.entrySet()) {
Log.d("map values", entry.getKey() + ": " + entry.getValue().toString());
}
Was Sie tun können, ist die getAll () -Methode von SharedPreferences zu verwenden und alle Werte in Map abzurufen. Anschließend können Sie sie einfach durchlaufen:
Map<String,?> keys = prefs.getAll();
for(Map.Entry<String,?> entry : keys.entrySet()){
Log.d("map values",entry.getKey() + ": " + entry.getValue().toString());
}
Weitere Informationen finden Sie in der dump () - Implementierung von PrefUtil.java über diesen Link .
Verwenden Sie die Methode getAll () von android.content.SharedPreferences
.
Map<String, ?> map = sharedPreferences.getAll();
Mit Kotlin können Sie mithilfe von Map alle Ihre SharedPreferences-Schlüssel mit nur einer Zeile abrufen .
Prost Kumpel 🎉
val sharedPreferences = context.getSharedPreferences("SHARED_PREFERENCES", Context.MODE_PRIVATE)
val sharedPreferenceIds = sharedPreferences.all.map { it.key } //returns List<String>
Überprüfen Sie den folgenden Code für die getAll()
Methode
Map<String, ?> prefsMap = prefA.getAll();
for (Map.Entry<String, ?> entry: prefsMap.entrySet()) {
Log.v("SharedPreferences", entry.getKey() + ":" +
entry.getValue().toString());
}
Nachdem ich die @ Delacrix-Antwort gelesen und mit dem Kotlin-Weg (getestet in Kotlin 1.3.11) zum Abrufen der Schlüssel gespielt hatte, fand ich eine noch kürzere Version heraus, um die Schlüssel (oder sogar die Werte) zu erhalten:
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 auf die Werte zugreifen sharedPreferences.all.values
(auch wenn dies nicht das ist, was Sie in Ihrer Frage gestellt haben, kann dies für andere Leser nützlich sein).
Obwohl die Antwort von @ Blackbelt hier sehr beliebt ist, denke ich, dass sie nicht wirklich auf die Frage abzielt. (Es ist nicht überraschend, da die Frage die Terminologie von Präferenznamen und -schlüsseln verwechselt.) Ich denke, die Frage ist, wie man herausfindet, welche Instanzen für gemeinsame Präferenzen erstellt wurden - was von Interesse sein kann, wenn die Namen dynamisch erstellt werden.
Hier sind zwei Strategien dafür:
Erstellen Sie eine weitere "Meta" -Instanz für gemeinsame Einstellungen, in der alle erstellten Instanzen für gemeinsam genutzte Einstellungen registriert werden, indem Sie den Meta-Einstellungen ein Schlüssel / Wert-Paar hinzufügen. Der Schlüssel ist der Name der freigegebenen Einstellungen und der Wert ist ein beliebiger Wert, z true
.
getSharedPreferences( DYNAMIC_PREFS_NAME, 0 )
.edit().put*(*).apply();
getSharedPreferences( "meta_prefs_index", 0 )
.edit().putBoolean( DYNAMIC_PREFS_NAME, true).apply();
Verwenden Sie die Meta-Einstellungen und folgen Sie der Antwort von @Blackbelt, um alle von Ihnen erstellten gemeinsamen Einstellungen zu erhalten.
Freigegebene Einstellungen verfügen über eine Sicherungsdatei, die in einem Ordner /data/data/YOUR_PACKAGE_NAME/shared_prefs
mit dem Namen gespeichert ist. YOUR_PREFS_NAME.xml
Sie können also in diesem Verzeichnis nach Ihren freigegebenen Voreinstellungsdateien suchen. Aber seien Sie vorsichtig, es kann gemeinsame Einstellungsdateien geben, die nicht von Ihrer Logik erstellt wurden! Deshalb würde ich beim ersten Ansatz bleiben.