Как получить все ключи в SharedPreferences
, а не только значение ключа предпочтения?
prefA = getSharedPreferences("MyAttack", MODE_PRIVATE);
prefB= getSharedPreferences("MySkill", MODE_PRIVATE);
Как получить все ключи в SharedPreferences
, а не только значение ключа предпочтения?
prefA = getSharedPreferences("MyAttack", MODE_PRIVATE);
prefB= getSharedPreferences("MySkill", MODE_PRIVATE);
SharedPreferences
имеет метод getAll()
, который возвращает a 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() SharedPreferences и получить все значения в Map, а затем вы можете легко выполнить итерацию через них:
Map<String,?> keys = prefs.getAll();
for(Map.Entry<String,?> entry : keys.entrySet()){
Log.d("map values",entry.getKey() + ": " + entry.getValue().toString());
}
Более того, вы можете проверить реализацию PrefUtil.java dump() с помощью этой .
Используйте метод getAll() для android.content.SharedPreferences
.
Map<String, ?> map = sharedPreferences.getAll();
Ознакомьтесь с приведенным ниже кодом для метода getAll()
Map<String, ?> prefsMap = prefA.getAll();
for (Map.Entry<String, ?> entry: prefsMap.entrySet()) {
Log.v("SharedPreferences", entry.getKey() + ":" +
entry.getValue().toString());
}
Kotlin позволит вам получить все ваши ключи SharedPreferences одной строкой с помощью карты.
Ура, приятель 🎉
val sharedPreferences = context.getSharedPreferences("SHARED_PREFERENCES", Context.MODE_PRIVATE)
val sharedPreferenceIds = sharedPreferences.all.map { it.key } //returns List<String>
Хотя ответ @Blackbelt довольно популярен, я думаю, что на самом деле он не затрагивает вопрос. (Это не удивительно, так как вопрос смешивает терминологию имен предпочтений и ключей.) Я предполагаю, что вопрос заключается в том, как определить, какие экземпляры общих предпочтений были созданы, что может представлять интерес, если имена создаются динамически.
Вот две стратегии для этого:
создать дополнительный экземпляр "meta" общих предпочтений, в котором все созданные экземпляры совместно используемых префайлов регистрируются путем добавления пары "ключ/значение" для метафайлов в метафайлы - с ключом, являющимся общим именем prefences, и значением является любое значение например 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
Таким образом, вы можете просмотреть этот каталог для файлов ваших общих предпочтений. Но будьте осторожны, могут быть файлы общих предпочтений, которые не были созданы вашей логикой! Поэтому я бы придерживался первого подхода.
Прочитав ответ @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
(даже если это не то, что вы задали в своем вопросе, может быть полезно для других читателей).