web-dev-qa-db-fra.com

Comment obtenir toutes les clés des références partagées par programmation dans Android?

Comment obtenir toutes les clés dans SharedPreferences, pas la valeur de la préférence, uniquement la clé?

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

SharedPreferences a la méthode getAll() qui retourne un Map<String, ?>. À partir de la carte, vous pouvez récupérer facilement les clés avec keySet() et les mappages clé/valeur avec entrySet():

Map<String, ?> allEntries = prefA.getAll();
for (Map.Entry<String, ?> entry : allEntries.entrySet()) {
    Log.d("map values", entry.getKey() + ": " + entry.getValue().toString());
} 
149
Blackbelt

Ce que vous pouvez faire est d'utiliser la méthode getAll () de SharedPreferences et d'obtenir toutes les valeurs dans Map. Vous pourrez ensuite les parcourir facilement

Map<String,?> keys = prefs.getAll();

for(Map.Entry<String,?> entry : keys.entrySet()){
    Log.d("map values",entry.getKey() + ": " + entry.getValue().toString());            
}

Pour plus d'informations, vous pouvez vérifier l'implémentation de dump () de PrefUtil.Java avec ce lien link .

14
Bhanu Sharma

Utilisez la méthode getAll () de Android.content.SharedPreferences.

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

Découvrez le code ci-dessous pour la méthode getAll()

Map<String, ?> prefsMap = prefA.getAll();
for (Map.Entry<String, ?> entry: prefsMap.entrySet()) {
    Log.v("SharedPreferences", entry.getKey() + ":" + 
entry.getValue().toString());
}
3
Naveed Ahmad

Kotlin vous permettra d'obtenir toutes vos clés SharedPreferences avec une seule ligne en utilisant Map

Salut mate ????

val sharedPreferences = context.getSharedPreferences("SHARED_PREFERENCES", Context.MODE_PRIVATE)
val sharedPreferenceIds = sharedPreferences.all.map { it.key } //returns List<String>
1
Delacrix Morgan

Après avoir lu la réponse @Delacrix et joué avec la méthode Kotlin (testée dans Kotlin 1.3.11) pour récupérer les clés, j'ai découvert une version encore plus courte pour obtenir les clés (ou même les valeurs):

val prefsA = context.getSharedPreferences("MyAttack", Context.MODE_PRIVATE)
val prefsAIDs = sharedPreferences.all.keys //returns MutableSet<String>

De la même manière, vous ne pouvez accéder qu'aux valeurs via sharedPreferences.all.values (même si ce n'est pas ce que vous avez demandé dans votre question, cela pourrait être utile pour les autres lecteurs).

0

Bien que la réponse de @ Blackbelt soit très populaire ici, je pense qu'elle ne vise pas réellement la question. (Ce n'est pas surprenant puisque la question mélange la terminologie des noms de préférences et des clés.) Je suppose que la question est de savoir quelles instances de préférences partagées ont été créées - ce qui peut présenter un intérêt si les noms sont créés de manière dynamique.

Voici deux stratégies pour cela:

  • créer une autre instance "méta" de préférences partagées dans laquelle toutes les instances de préférences partagées créées sont enregistrées en ajoutant une paire clé/valeur correspondante dans les préférences méta - la clé étant le nom de la préfecture partagée et la valeur, par exemple toute valeur true

    getSharedPreferences( DYNAMIC_PREFS_NAME, 0 )
        .edit().put*(*).apply();
    getSharedPreferences( "meta_prefs_index", 0 )
        .edit().putBoolean( DYNAMIC_PREFS_NAME, true).apply();
    

    Pour obtenir toutes les préférences partagées que vous avez créées, utilisez les méta-préférences et suivez la réponse de @Blackbelt.

  • les préférences partagées ont un fichier de sauvegarde, qui est stocké dans le dossier /data/data/YOUR_PACKAGE_NAME/shared_prefs avec le nom YOUR_PREFS_NAME.xmlVous pouvez donc rechercher dans ce répertoire vos fichiers de préférences partagés. Mais attention, il peut y avoir des fichiers de préférences partagés qui n'ont pas été créés par votre logique! Donc je m'en tenais à la première approche.

0
Peter F