Общие настройки теряются после выключения устройства или уничтожения приложения - PullRequest
11 голосов
/ 21 марта 2012

Есть много вопросов, связанных с общими предпочтениями и альтернативами. Моя проблема: когда я выключаю устройство или убиваю приложение, общие настройки теряются. Обратите внимание, что мой код на самом деле работает на Acer A500. Но на моем Motorola Xoom MZ604 он не работает !!

Прежде всего я пытаюсь восстановить мой HashSet в onCreate. Этот метод вызывается наверняка и реализован в виде синглтона.

public boolean restoreCollection(Context context){
    SharedPreferences settings = context.getSharedPreferences(context.getString(R.string.restore_values), 0);
    if(settings.getStringSet(context.getString(R.string.collection), null) != null){
        collection = settings.getStringSet(context.getString(R.string.collection), null);
        return true;
    } 
    collection = new HashSet<String>();
    return false;
}

Вызывая onDestroy, я сохраняю HashSet. Даже если не указано, что этот метод вызывается наверняка, настройки теряются в любом случае, я пытаюсь сохранить его в onPause с тем же результатом.

public void saveCollection(Context context){
    SharedPreferences settings = context.getSharedPreferences(context.getString(R.string.restore_values), 0);
    SharedPreferences.Editor e = settings.edit();
e.putStringSet(context.getString(R.string.collection), collection);
e.commit();
}

Были ли у кого-то проблемы с общими настройками и устройством XOOM, или я один? Возможно, что-то не так с моим кодом, но на планшете Acer данные не теряются.

Я также пытался PreferenceManager.getDefaultSharedPreferences (context), чтобы получить объект SharedPreferences

Спасибо за вашу помощь, Крис

Ответы [ 3 ]

13 голосов
/ 24 июля 2015

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

Очень важно прочитать документацию по API для SharedPreferences.getStringSet (ключ String, Set defValues)

По существу НЕ изменить или коснуться возвращенного набора! Если вы это сделаете, вы получите странные результаты с SharedPreferences. :)

Наслаждайтесь!

13 голосов
/ 23 марта 2012

Я нашел решение, которое работает как на моем Acer, так и на моем устройстве XOOM: вам нужно вызвать clear () в редакторе, прежде чем добавлять новые данные:

public void saveCollection(Context context){
    SharedPreferences settings = context.getSharedPreferences(context.getString(R.string.restore_values), 0);
    SharedPreferences.Editor e = settings.edit();
    e.clear();
    e.putStringSet(context.getString(R.string.collection), collection);
    e.commit();
}
3 голосов
/ 11 декабря 2012

Ваша проблема, похоже, такая же, как , обсуждаемая здесь для устройства Samsung Galaxy S, работающего в стандарте Froyo 2.2.1. Некоторые впечатления от их обсуждения:

Журнал показывает:

01-19 12: 08: 56,856 W / ApplicationContext (4563): Попытка чтения файла настроек /dbdata/databases/com.mobilemerit.ultimatefaves/ shared_prefs / com.mobilemerit.ultimatefaves_preferences.xml без разрешение

Один из возможных путей решения проблемы:

У моего пользователя, похоже, был такой же симптом.

Он написал мне по электронной почте, что ему пришлось сделать сброс настроек к своему телефону из-за по другим причинам он переустановил приложение с маркета (то, что до сброса не помогло) и теперь все работает как положено.

Другой обходной путь:

У меня такие же проблемы с моей 2.2.1 Galaxy S (рутирован), я ее решаю удалив папку моего приложения (com.xxx) в \ dbdata \ database. Есть ли у кого-то такая же проблема на другом телефоне?

И этот парень на самом деле нашел причину этого:

Я установил свое приложение (WidgetLocker), и он получил app_81, затем я затем удалите с помощью «adb uninstall com.teslacoilsw.widgetlocker» переустановил и обнаружил, что мои предпочтения сохранились через удалить, но нет разрешения отказано в ошибке. Я снова удалил в Точно так же, на этот раз я пошел в Маркет и установил Androidify. Вот когда все стало интересно: (...)

Итак, Androidify получил мой uid , и мои предпочтения теперь относятся к их . (...)

И мы облажались ...

Существует сообщение об ошибке для этой проблемы: http://code.google.com/p/android/issues/detail?id=14359

Google отклонил эту ошибку, поскольку на самом деле это ошибка, вызванная изменениями, внесенными поставщиком устройства.

Авторы приложения «Красивые виджеты» дают своим пользователям следующие советы:

** SAMSUNG GALAXY S & ANDROID 2.2 **
В обновлении Samsung есть ошибка, которая не позволяет сохранить файл настроек. Вам нужно на завод сбросить настройки телефона (...)

Так что это должно помочь.

Ответьте на этот ответ, если на вашем устройстве Xoom такая же проблема.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...