Как заставить SharedPreferences сохранить?

1

Насколько я могу судить, значения не сохраняются в Android SharedPreferences до SharedPreferences пор, пока они явно не будут доступны. То есть, хотя у них могут быть значения по умолчанию в XML, в хранилище SharedPreferences значение не будет помещено до тех пор, пока не будет вызван метод accessor, поэтому все аксессоры имеют параметры "по умолчанию".

Хотя это не очень просто для вытаскивания значений из хранилища предпочтений, это предотвращает любую попытку получить все ключи предпочтений, которые используются в приложении, даже если они хранятся в XML. Клавиши не отображаются, если SharedPreferences#getAll() если предпочтение уже явно не доступно.

Есть ли способ принудительно сохранить все настройки, определенные в XML, в хранилище SharedPreferences? Ближайшее решение, которое я могу найти, - это вручную разобрать XML файлы Preference, найти все ключи и значения по умолчанию и сохранить значение по умолчанию для каждого из них. Есть ли более чистый подход?

ОБНОВИТЬ

Посмотрев на это более подробно, я получаю неполный список предпочтений по другой причине. Когда установлены значения по умолчанию, сохраняются только значения EditTextPreference и ListPreference. Остальные два, пользовательские предпочтения и CheckBoxPreference полностью игнорируются. Вот пример CheckBoxPreference, который игнорируется:

<CheckBoxPreference
    android:defaultValue="false"
    android:key="PREF_NAME"
    android:summary="Summary text"
    android:title="Title" />

Любая идея, почему не все настройки по умолчанию установлены?

Теги:
sharedpreferences
android-preferences

2 ответа

2
Лучший ответ

Вы можете использовать PreferenceManager::setDefaultValues. Например, в вашем методе Application::onCreate.

PreferenceManager.setDefaultValues(this, R.xml.preferences, false);

Если последний аргумент является false, это будет устанавливать только значения по умолчанию, если этот метод никогда не вызывался в прошлом.

  • 0
    Кажется, проблема немного более тонкая, хотя это, безусловно, правильный ответ на проблему, которая, как я думал, возникла у меня.
  • 0
    Я отмечаю ваш ответ как принятый, поскольку он ответил на заданный мной вопрос, и это, вероятно, скорее привлечет пользователей, чем реальную проблему, с которой я столкнулся.
0

Причиной недостающих предпочтений в моем случае была ошибка Android. Обходной путь состоял в том, чтобы вручную установить отсутствующие предпочтения в значения по умолчанию, как указано в дублированном вопросе: Android CheckBoxPreference Значение по умолчанию

Ещё вопросы

Сообщество Overcoder
Наверх
Меню