web-dev-qa-db-ja.com

AndroidでプログラムでSharedPreferencesのすべてのキーを取得する方法は?

プリファレンスの値だけではなく、SharedPreferencesのすべてのキーを取得するにはどうすればよいですか?

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

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());
} 
_
161
Blackbelt

できることは、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()実装を確認できます。

15
Bhanu Sharma

Android.content.SharedPreferencesの-​​ getAll() メソッドを使用します。

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

getAll()メソッドの以下のコードを確認してください

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

Kotlinでは、 Map を使用して、1行だけですべてのSharedPreferencesキーを取得できます。

歓声メイト ????

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

@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に保存されているので、共有設定ファイルのディレクトリを調べることができます。しかし、注意してください、あなたのロジックによって作成されていない共有設定ファイルがあるかもしれません!そのため、最初のアプローチに固執します。

0
Peter F