Як отримати всі ключі 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());
}
Щоб дізнатись більше, ви можете перевірити реалізацію dum () PrefUtil.java за цим посиланням .
Використовуйте метод getAll () з android.content.SharedPreferences
.
Map<String, ?> map = sharedPreferences.getAll();
Kotlin дозволить вам отримати всі ваші ключі SharedPreferences лише одним рядком за допомогою Map .
Вітайте пару 🎉
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
(навіть tho - це не те, що ви задали у своєму запитанні, може бути корисним для інших читачів).
Хоча відповідь @ 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
Таким чином, ви можете переглянути цей каталог для файлів спільних налаштувань. Але будьте обережні, можуть бути спільні файли налаштувань, які не були створені за вашою логікою! Тому я б дотримувався першого підходу.