如何获取 SharedPreferences
中的所有键,而不是仅限首选项值的键?
prefA = getSharedPreferences("MyAttack", MODE_PRIVATE);
prefB= getSharedPreferences("MySkill", MODE_PRIVATE);
如何获取 SharedPreferences
中的所有键,而不是仅限首选项值的键?
prefA = getSharedPreferences("MyAttack", MODE_PRIVATE);
prefB= getSharedPreferences("MySkill", MODE_PRIVATE);
SharedPreferences
有一个getAll()
方法,返回一个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());
}
Map<String,?> keys = prefs.getAll();
for(Map.Entry<String,?> entry : keys.entrySet()){
Log.d("map values",entry.getKey() + ": " + entry.getValue().toString());
}
如需了解更多信息,您可以使用此链接查看PrefUtil.java的dump()实现。
使用 android.content.SharedPreferences
的 getAll() 方法。
Map<String, ?> map = sharedPreferences.getAll();
val sharedPreferences = context.getSharedPreferences("SHARED_PREFERENCES", Context.MODE_PRIVATE)
val sharedPreferenceIds = sharedPreferences.all.map { it.key } //returns List<String>
请查看以下代码中 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
访问值(尽管这不是您在问题中提出的内容,但对其他读者可能会有用)。create another shared preferences "meta" instance where all created shared prefences instances are registered by adding a key/value pair for it to the meta prefs - with the key being the shared prefences name and the value being any value e.g. true
.
getSharedPreferences( DYNAMIC_PREFS_NAME, 0 )
.edit().put*(*).apply();
getSharedPreferences( "meta_prefs_index", 0 )
.edit().putBoolean( DYNAMIC_PREFS_NAME, true).apply();
To obtain all shared prefences created by you, use the meta prefs and follow the answer of @Blackbelt.
shared preferences have a backup file, which is stored in folder /data/data/YOUR_PACKAGE_NAME/shared_prefs
with name YOUR_PREFS_NAME.xml
So you can look into that directory for your shared preferences files. But be careful, there might be shared preferences files that were not created by your logic! Therfore I would stick with the first approach.