Wie bekomme ich alle Schlüssel rein SharedPreferences
, nicht nur den Wert der Voreinstellung?
prefA = getSharedPreferences("MyAttack", MODE_PRIVATE);
prefB= getSharedPreferences("MySkill", MODE_PRIVATE);
android
android-preferences
Piolo Opaw
quelle
quelle
Antworten:
SharedPreferences
hat die MethodegetAll()
, die a zurückgibtMap<String, ?>
. Auf der Karte können Sie einfach die Schlüssel mitkeySet()
und die Schlüssel- / Wertzuordnungen abrufen mitentrySet()
:Map<String, ?> allEntries = prefA.getAll(); for (Map.Entry<String, ?> entry : allEntries.entrySet()) { Log.d("map values", entry.getKey() + ": " + entry.getValue().toString()); }
quelle
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 .
quelle
Verwenden Sie die Methode getAll () von
android.content.SharedPreferences
.Map<String, ?> map = sharedPreferences.getAll();
quelle
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>
quelle
Überprüfen Sie den folgenden Code für die
getAll()
MethodeMap<String, ?> prefsMap = prefA.getAll(); for (Map.Entry<String, ?> entry: prefsMap.entrySet()) { Log.v("SharedPreferences", entry.getKey() + ":" + entry.getValue().toString()); }
quelle
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).quelle
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.quelle