Я использую следующий код:
SharedPreferences.Editor edit = mPrefs.edit();
edit.putString("UUID", UUID.randomUUID().toString());
edit.commit();
//edit.apply();
Это отлично работает, но если я прокомментирую коммит и раскомментирую заявку, сила приложения закрывается на моем устройстве без сообщения об ошибке или брошенного исключения. Как ни странно, это нормально работает в эмуляторе, под 2.2 и 2.3.3. Он закрывается только на моем Nexus с 2.2.1
У меня есть обходное решение выше, но я заинтересован в причине закрытия.
Может ли кто-нибудь помочь?
Приветствия, Венату
apply()
был добавлен в уровень API 9 (a.k.a., Android 2.3). Не пытайтесь использовать его на Android 2.2.
Его простой я использую кодекс следующим образом:
if (respondsTo(editor, "apply")) invoke(editor, "apply");
else editor.commit();
а затем у меня есть эти два магических метода как статический импорт.
public static boolean respondsTo(Object object, String methodName) {
try {
object.getClass().getMethod(methodName, (Class<?>[]) null);
return Yes;
} catch (NoSuchMethodException e) {
return No;
}
}
public static Object invoke(Object object, String methodName) {
try {
return object.getClass().getMethod(methodName, (Class<?>[]) null).invoke(object);
} catch (Exception e) {
return INVOKE_FAILED;
}
}
Commit запускается при блокировке пользовательского интерфейса, что может быть проблемой при сохранении больших данных. Я использовал фоновый поток для фиксации (его проблемный...), но теперь у многих пользователей есть 2.3, поэтому я думаю, что более старый должен переключиться...