SharedPreferences a la méthode getAll, mais elle ne renvoie aucune entrée malgré le fait que certaines clés existent:
PreferenceManager.getDefaultSharedPreferences(this).contains("addNewAddress");
renvoie vrai
Map<String, ?> keys=PreferenceManager.getDefaultSharedPreferences(this).getAll();
renvoie une carte vide
Qu'est-ce qui ne va pas? Comment obtenir la liste de toutes les préférences partagées?
Ce que vous pouvez faire, c'est utiliser la méthode getAll()
de SharedPreferences
et obtenir toutes les valeurs dans Map<String,?>
, Puis vous pouvez facilement les parcourir.
Map<String,?> keys = prefs.getAll();
for(Map.Entry<String,?> entry : keys.entrySet()){
Log.d("map values",entry.getKey() + ": " +
entry.getValue().toString());
}
Pour en savoir plus, vous pouvez vérifier PrefUtil.Java's
dump()
implémentation.
je pense que la question a plus à voir avec pourquoi
PreferenceManager.getDefaultSharedPreferences(this).getAll()
renvoie une carte vide/contradictoire par rapport à la façon d'itérer sur une carte standard Java. la doc Android n'est pas vraiment claire sur ce qui se passe ici, mais fondamentalement, elle semble être le premier appel à
PreferenceManager.setDefaultValues(this, R.xml.preferences,false)
- qui est ce que vous êtes censé appeler pour initialiser les préférences lorsque vous démarrez votre application - crée une sorte de version mise en cache de vos préférences qui provoque des modifications futures de votre fichier de préférences xml de manière incohérente, c'est-à-dire, provoquant le décalage vous décrit dans votre question.
pour réinitialiser cette "entité en cache", suivez ces étapes (que vous pouvez en quelque sorte trouver à partir du lien ci-dessus):
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
prefs.edit().clear();
PreferenceManager.setDefaultValues(this, R.xml.preferences, true);
au cas où quelqu'un voudrait parcourir les préférences partagées dans KOTLIN
sharedPreferences?.all?.forEach {
//access key using it.key & value using it.value
Log.d("Preferences values",it.key() + ": " + it.value()
}