SharedPreferences.Editor.apply принудительно закрывает - PullRequest
1 голос
/ 16 февраля 2011

Я использую следующий код:

SharedPreferences.Editor edit = mPrefs.edit();
edit.putString("UUID", UUID.randomUUID().toString());
edit.commit();
//edit.apply();

Это работает нормально, но если я закомментирую фиксацию и раскомментирую заявку, приложение закроется на моем устройстве без сообщения об ошибке или исключения,Странно, но в эмуляторе все работает нормально, под 2.2 и 2.3.3.Он закрывается только на моем Nexus, работающем 2.2.1

. У меня есть обходной путь выше, но меня интересует причина закрытия.

Кто-нибудь может помочь?

Приветствия, Venatu

Ответы [ 2 ]

4 голосов
/ 16 февраля 2011

apply() был добавлен на уровне API 9 (a.k.a., Android 2.3). Не пытайтесь использовать его на Android 2.2.

0 голосов
/ 25 июня 2013

Просто я использую коде так:

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;
    }
}

Фиксация выполняется при блокировании пользовательского интерфейса, поэтому при сохранении больших данных могут возникнуть проблемы. Я использовал фоновый поток для коммита (это проблематично ...), но теперь у многих пользователей есть 2.3, так что я думаю, что старше следует переключиться ...

...