プリファレンスの値だけではなく、SharedPreferences
のすべてのキーを取得するにはどうすればよいですか?
prefA = getSharedPreferences("MyAttack", MODE_PRIVATE);
prefB= getSharedPreferences("MySkill", MODE_PRIVATE);
SharedPreferences
には、_Map<String, ?>
_を返すメソッドgetAll()
があります。マップから、keySet()
を使用してキーを簡単に取得し、entrySet()
を使用してキー/値マッピングを取得できます。
_Map<String, ?> allEntries = prefA.getAll();
for (Map.Entry<String, ?> entry : allEntries.entrySet()) {
Log.d("map values", entry.getKey() + ": " + entry.getValue().toString());
}
_
できることは、SharedPreferencesのgetAll()メソッドを使用して、Map内のすべての値を取得し、それらを簡単に反復処理することです。
Map<String,?> keys = prefs.getAll();
for(Map.Entry<String,?> entry : keys.entrySet()){
Log.d("map values",entry.getKey() + ": " + entry.getValue().toString());
}
詳細については、この link でPrefUtil.Javaのdump()実装を確認できます。
Android.content.SharedPreferences
の- getAll() メソッドを使用します。
Map<String, ?> map = sharedPreferences.getAll();
getAll()
メソッドの以下のコードを確認してください
Map<String, ?> prefsMap = prefA.getAll();
for (Map.Entry<String, ?> entry: prefsMap.entrySet()) {
Log.v("SharedPreferences", entry.getKey() + ":" +
entry.getValue().toString());
}
Kotlinでは、 Map を使用して、1行だけですべてのSharedPreferencesキーを取得できます。
歓声メイト ????
val sharedPreferences = context.getSharedPreferences("SHARED_PREFERENCES", Context.MODE_PRIVATE)
val sharedPreferenceIds = sharedPreferences.all.map { it.key } //returns List<String>
@Delacrixレスポンスを読んで、Kotlin-way(Kotlin 1.3.11でテスト済み)でキーを取得した後、キー(または値)を取得するためのさらに短いバージョンを見つけました。
val prefsA = context.getSharedPreferences("MyAttack", Context.MODE_PRIVATE)
val prefsAIDs = sharedPreferences.all.keys //returns MutableSet<String>
同じ方法で、sharedPreferences.all.values
を介して値にのみアクセスできます(thoは、あなたが質問で尋ねたものではなくても、他の読者に役立つかもしれません)。
@Blackbeltの答えはここでは非常に人気がありますが、実際には質問をターゲットにしているわけではないと思います。 (質問は設定名とキーの用語を混同するので驚くことではありません。)質問はどの共有設定インスタンスが作成されているかをどのように見つけるかです-名前が動的に作成される場合は興味深いかもしれません。
そのための2つの戦略を次に示します。
別の共有設定「メタ」インスタンスを作成します。作成されたすべての共有プリフェンスインスタンスは、キーと値のペアをメタ設定に追加して登録します。キーは共有プリフェンス名で、値は任意の値です。 true
。
getSharedPreferences( DYNAMIC_PREFS_NAME, 0 )
.edit().put*(*).apply();
getSharedPreferences( "meta_prefs_index", 0 )
.edit().putBoolean( DYNAMIC_PREFS_NAME, true).apply();
自分で作成したすべての共有プリフェンスを取得するには、メタ設定を使用して、@ Blackbeltの回答に従います。
共有設定にはバックアップファイルがあり、/data/data/YOUR_PACKAGE_NAME/shared_prefs
という名前のフォルダーYOUR_PREFS_NAME.xml
に保存されているので、共有設定ファイルのディレクトリを調べることができます。しかし、注意してください、あなたのロジックによって作成されていない共有設定ファイルがあるかもしれません!そのため、最初のアプローチに固執します。