如何在Android中以编程方式获取SharedPreferences的所有键?

Pio*_*paw 64 android android-preferences

如何获取所有密钥SharedPreferences,而不仅仅是密钥的优先级值?

prefA = getSharedPreferences("MyAttack", MODE_PRIVATE);
prefB= getSharedPreferences("MySkill", MODE_PRIVATE);
Run Code Online (Sandbox Code Playgroud)

Bla*_*elt 168

SharedPreferencesgetAll()返回 的方法Map<String, ?>.从Map中,您可以轻松检索键keySet()和键/值映射entrySet():

Map<String, ?> allEntries = prefA.getAll();
for (Map.Entry<String, ?> entry : allEntries.entrySet()) {
    Log.d("map values", entry.getKey() + ": " + entry.getValue().toString());
} 
Run Code Online (Sandbox Code Playgroud)

  • 我问谷歌这个问题,并立即指出这个答案,花了我大约2.1秒的时间找到答案。谢谢队友! (2认同)
  • @kushan,map接受空值.toString可能导致NPE并且没有必要.plus运算符已经完成了toString转换 (2认同)

Bha*_*rma 15

你可以做的是使用SharedPreferences的getAll()方法并获取Map中的所有值,然后你可以轻松地遍历它们:

Map<String,?> keys = prefs.getAll();

for(Map.Entry<String,?> entry : keys.entrySet()){
    Log.d("map values",entry.getKey() + ": " + entry.getValue().toString());            
}
Run Code Online (Sandbox Code Playgroud)

有关更多信息,您可以使用此链接检查PrefUtil.java的dump()实现.


Mar*_*ema 13

使用getAll()方法android.content.SharedPreferences.

Map<String, ?> map = sharedPreferences.getAll();
Run Code Online (Sandbox Code Playgroud)

  • @Piolo Opaw如果解决了您的问题,请标记为接受的答案。 (2认同)

Mor*_*Koh 7

Kotlin 将允许您使用Map仅用一行来获取所有 SharedPreferences 键。

队友的欢呼声

val sharedPreferences = context.getSharedPreferences("SHARED_PREFERENCES", Context.MODE_PRIVATE)
val sharedPreferenceIds = sharedPreferences.all.map { it.key } //returns List<String>
Run Code Online (Sandbox Code Playgroud)


Nav*_*mad 5

查看下面的getAll()方法代码

Map<String, ?> prefsMap = prefA.getAll();
for (Map.Entry<String, ?> entry: prefsMap.entrySet()) {
    Log.v("SharedPreferences", entry.getKey() + ":" + 
entry.getValue().toString());
}
Run Code Online (Sandbox Code Playgroud)


Hug*_*ona 5

在阅读了 @Delacrix 回复并使用 Kotlin 方式(在 Kotlin 1.3.11 中测试)检索键后,我发现了一个更短的版本来获取键(甚至是值):

val prefsA = context.getSharedPreferences("MyAttack", Context.MODE_PRIVATE)
val prefsAIDs = sharedPreferences.all.keys //returns MutableSet<String>
Run Code Online (Sandbox Code Playgroud)

同样,您只能通过访问值sharedPreferences.all.values(即使这不是您在问题中询问的内容,可能对其他读者有用)。