如何获取
SharedPreferences
中的所有键,而不是仅获取首选项的值?
prefA = getSharedPreferences("MyAttack", MODE_PRIVATE);
prefB= getSharedPreferences("MySkill", MODE_PRIVATE);
SharedPreferences
具有返回 getAll()
的方法 Map<String, ?>
。从映射中,您可以使用 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() 实现。
Kotlin 将允许您使用 Map 只需一行即可获取所有 SharedPreferences 键。
干杯伙计🎉
val sharedPreferences = context.getSharedPreferences("SHARED_PREFERENCES", Context.MODE_PRIVATE)
val sharedPreferenceIds = sharedPreferences.all.map { it.key } //returns List<String>
在阅读了 @Delacrix 回复并使用 Kotlin 方式(在 Kotlin 1.3.11 中测试)检索密钥后,我发现了一个更短的版本来获取密钥(甚至是值):
val sharedPreferences = context.getSharedPreferences("MyAttack", Context.MODE_PRIVATE)
val prefsAIDs = sharedPreferences.all.keys //returns MutableSet<String>
同样的方式,您只能通过
sharedPreferences.all.values
访问值(即使这不是您在问题中询问的内容,可能对其他读者有用)。
查看下面的代码
getAll()
方法
Map<String, ?> prefsMap = prefA.getAll();
for (Map.Entry<String, ?> entry: prefsMap.entrySet()) {
Log.v("SharedPreferences", entry.getKey() + ":" +
entry.getValue().toString());
}
虽然@Blackbelt的回答在这里很受欢迎,但我认为它实际上并没有针对这个问题。 (这并不奇怪,因为这个问题混淆了首选项名称和键的术语。)我想问题是如何找出已创建的共享首选项实例 - 如果名称是动态创建的,这可能会很有趣。
这里有两个策略:
创建另一个共享首选项“元”实例,其中所有创建的共享首选项实例都是通过将键/值对添加到元首选项来注册的 - 键是共享首选项名称,值是任何值,例如
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
中
因此,您可以在该目录中查找共享首选项文件。但要小心,可能存在不是由您的逻辑创建的共享首选项文件!因此我会坚持第一种方法。