webentwicklung-frage-antwort-db.com.de

Wie bekomme ich alle Schlüssel für SharedPreferences programmgesteuert in Android?

Wie bekomme ich alle Schlüssel in SharedPreferences, nicht nur den Wert der Vorzugstaste?

prefA = getSharedPreferences("MyAttack", MODE_PRIVATE);
prefB= getSharedPreferences("MySkill", MODE_PRIVATE);
53
Piolo Opaw

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());
} 
149
Blackbelt

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.

14
Bhanu Sharma

Verwenden Sie die getAll () - Methode von Android.content.SharedPreferences.

Map<String, ?> map = sharedPreferences.getAll();
13
Mark Buikema

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());
}
3
Naveed Ahmad

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>
1
Delacrix Morgan

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.xmlS 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.

0
Peter F