SharedPreferencesにはgetAllメソッドがありますが、いくつかのキーが存在するにもかかわらずエントリを返しません。
PreferenceManager.getDefaultSharedPreferences(this).contains("addNewAddress");
trueを返します
Map<String, ?> keys=PreferenceManager.getDefaultSharedPreferences(this).getAll();
空のマップを返します
なにが問題ですか?すべての共有設定のリストを取得する方法は?
できることは、 getAll()
SharedPreferences
のメソッドを使用し、_Map<String,?>
_のすべての値を取得すれば、簡単に反復処理できます。
_Map<String,?> keys = prefs.getAll();
for(Map.Entry<String,?> entry : keys.entrySet()){
Log.d("map values",entry.getKey() + ": " +
entry.getValue().toString());
}
_
詳細については、 _PrefUtil.Java's
_dump()
実装を確認してください。
私は質問が理由ともっと関係があると思う
PreferenceManager.getDefaultSharedPreferences(this).getAll()
標準のJavaマップを繰り返し処理する方法よりも、空のマップまたは矛盾したマップを返します。 Android doc は、ここで何が起こっているのかについて明確ではありません。しかし基本的には、最初の呼び出しのようです
PreferenceManager.setDefaultValues(this, R.xml.preferences,false)
-これは、アプリを起動するときに設定を初期化するために呼び出すものです-ある種のキャッシュされた設定を作成します。これにより、xml設定ファイルへの将来の変更が一貫性なく処理されます。あなたの質問に記載されています。
この「キャッシュされたエンティティ」をリセットするには、次の手順を実行します(上記のリンクから思いつくことができます)。
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
prefs.edit().clear();
PreferenceManager.setDefaultValues(this, R.xml.preferences, true);
誰もがKOTLINの共有設定を反復したい場合に備えて
sharedPreferences?.all?.forEach {
//access key using it.key & value using it.value
Log.d("Preferences values",it.key() + ": " + it.value()
}