android: defaultValue не работает на некоторых телефонах - Временное решение? - PullRequest
2 голосов
/ 21 октября 2011

Мне нужно, чтобы значение по умолчанию, заданное в настройках XML, было доступно при первом запуске.

В некоторых телефонах это работает, но некоторые другие телефоны (например, Samsung ) ведут себя очень странно.

В моем конкретном случае следующий код:

String key = "@string/timeout_key"
timeout = Integer.valueOf(prefs.getString(key, "10"));

Продолжает возвращать (timeout) значение по умолчанию "10" (передается как 2-й параметр в prefs.getString()), хотя в XML-настройках указано:

android:defaultValue="5"

Строка "timeout_key" существует, и я могу убедиться, что она прочитана правильно.

В настоящее время мой «обходной путь» - вызвать редактор настроек, повторно ввести настройки и нажать ОК.

Есть ли способ сделать это программно?

1 Ответ

2 голосов
/ 21 октября 2011

Метод SharedPreferences.getString () содержит ошибки и не возвращает android:defaultValue. Он вернет второй параметр только в случае сбоя чтения. Чтобы обойти это, введите null во втором параметре:

timeout = Integer.valueOf(prefs.getString(key, null));

Это, конечно, вызовет исключение при первом вызове после установки приложения, поэтому вы должны заключить его в try и, перехватывая исключение, написать свое значение по умолчанию (то, которое в вашем android: defaultValue , изначально предназначенный для использования, если Android не глючил):

try {
  timeout = Integer.valueOf(prefs.getString(key, null));
}
catch (Exception e) {
  Editor editor = prefs.edit();
  editor.putString(key, Integer.toString(defaultValue));
  editor.commit();
}

Ужасно, но работает.

...