SharedPreferences ma metodę getAll, ale nie zwraca ona żadnych wpisów pomimo faktu, że istnieją klucze:
PreferenceManager.getDefaultSharedPreferences(this).contains("addNewAddress");
zwraca prawdę
Map<String, ?> keys=PreferenceManager.getDefaultSharedPreferences(this).getAll();
zwraca pustą mapę
Co jest nie tak? Jak uzyskać listę wszystkich wspólnych preferencji?
android
sharedpreferences
Eugene Chumak
źródło
źródło
getAll()
może zwrócićNULL
wartość. Byłoby lepiej sprawdzićkeys
NULL.entry.getValue()
, niżentry.getValue().toString()
nie dostać NullPointerException)myślę, że pytanie ma więcej wspólnego z tym, dlaczego
PreferenceManager.getDefaultSharedPreferences(this).getAll()
zwraca pustą / sprzeczną mapę niż w przypadku iteracji po standardowej mapie java. android doc naprawdę nie jest krystalicznie czysta, co się dzieje tutaj, ale w zasadzie wydaje się, że pierwsze wezwanie kiedykolwiek do
PreferenceManager.setDefaultValues(this, R.xml.preferences,false)
- co powinieneś wywołać, aby zainicjować preferencje podczas uruchamiania aplikacji - tworzy jakąś buforowaną wersję twoich preferencji, która powoduje, że przyszłe zmiany w twoim pliku preferencji xml będą niespójnie obsługiwane, tj. powodując niedopasowanie opisane w Twoim pytaniu.
aby zresetować tę „jednostkę w pamięci podręcznej”, wykonaj następujące kroki (które można znaleźć w powyższym linku):
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); prefs.edit().clear(); PreferenceManager.setDefaultValues(this, R.xml.preferences, true);
źródło
na wypadek, gdyby ktoś chciał iterować poprzez wspólne preferencje w KOTLINIE
sharedPreferences?.all?.forEach { //access key using it.key & value using it.value Log.d("Preferences values",it.key() + ": " + it.value() }
źródło