如何获取所有密钥SharedPreferences
,而不是仅将首选项的值作为密钥?
prefA = getSharedPreferences("MyAttack", MODE_PRIVATE);
prefB= getSharedPreferences("MySkill", MODE_PRIVATE);
如何获取所有密钥SharedPreferences
,而不是仅将首选项的值作为密钥?
prefA = getSharedPreferences("MyAttack", MODE_PRIVATE);
prefB= getSharedPreferences("MySkill", MODE_PRIVATE);
Answers:
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());
}
查看以下代码以获取getAll()
方法
Map<String, ?> prefsMap = prefA.getAll();
for (Map.Entry<String, ?> entry: prefsMap.entrySet()) {
Log.v("SharedPreferences", entry.getKey() + ":" +
entry.getValue().toString());
}
阅读@Delacrix响应并使用Kotlin方式(在Kotlin 1.3.11中进行了测试)检索密钥后,我发现了用于获得密钥(甚至值)的更短版本:
val prefsA = context.getSharedPreferences("MyAttack", Context.MODE_PRIVATE)
val prefsAIDs = sharedPreferences.all.keys //returns MutableSet<String>
以同样的方式,您只能通过访问这些值sharedPreferences.all.values
(即使不是您在问题中问的内容,也可能对其他读者有用)。
尽管@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
因此您可以在该目录中查找共享首选项文件。但请注意,可能存在不是由您的逻辑创建的共享首选项文件!因此,我会坚持使用第一种方法。