2016-03-06 4 views
0

В моем приложении я использовал более 1 года «Общие предпочтения» для хранения некоторых логических значений (например, если пользователь видел страницу ввода). Теперь я добавил еще одну настройку (если пользователь увидел страницу справки!), И все настройки перестали работать ...Android - Сохранение в общих предпочтениях перестало работать

Я попытался изменить «совершить», чтобы «применить», не повезло. Как можно просто добавить еще одно общее предпочтение, чтобы заставить его перестать работать? Есть ли предел свойств?

Мой код:

public SharedPreferences getSettings() { 
    SharedPreferences settings = getSharedPreferences(AppConstants.PREFS_NAME, 0); 
    return settings; 
} 

старая активность для Введения:

private void saveUserHasSeenIntro() { 
    SharedPreferences.Editor editor = getSettings().edit(); 
    editor.putBoolean(AppConstants.SETTING_BOOLEAN_HAS_SHOWN_INTRO_STEPS, true); 
    editor.commit(); 
} 

где интро булево читается:

Boolean hasShownIntroSteps = getSettings().getBoolean(AppConstants.SETTING_BOOLEAN_HAS_SHOWN_INTRO_STEPS, false); 
if (!hasShownIntroSteps) { 
    // show intro 
} else { 

Новая активность помощи:

private void saveUserHasSeenHelp() { 
    SharedPreferences.Editor editor = getSettings().edit(); 
    editor.putBoolean(AppConstants.SETTING_BOOLEAN_HAS_SHOWN_HELP_STEPS, true); 
    editor.commit(); 
} 

где «помощь» булево читается:

Boolean hasSeenHelp = getSettings().getBoolean(AppConstants.SETTING_BOOLEAN_HAS_SHOWN_HELP_STEPS, false); 
if (!hasSeenHelp) { 
    // show help activity 
} else { 
+0

случайно вы удалили любую строку во время редактирования сейчас? :) – OBX

+0

@BobMalooga - эта часть - псевдокод. Проблема в том, что get getBoolean всегда возвращает «FALSE», пока я сохранил «true» до – Panos

ответ

0

Это может быть ограничение памяти на файл SharedPreferences и обычно это происходит с OutOfMemoryException. Я думаю, если что-то подобное произойдет, вы, вероятно, видели бы это в своем коде, если только вы не читаете/не пишете в другом Thread. Насколько большой ваш файл SharedPreferences в числах пары ключ-значение?

0

Ваши методы в порядке, и они должны работать отлично. Проверьте пару вещей на всякий случай:

  1. Убедитесь, что вы не звоните clear() или remove() метод SharedPreferences редактора после сохранения префов по ошибке.
  2. Убедитесь, что константы AppConstants.SETTING_BOOLEAN_HAS_SHOWN_HELP_STEPS и AppConstants.SETTING_BOOLEAN_HAS_SHOWN_INTRO_STEPS имеют разные значения, поскольку первые могут перекрывать вторую по ошибке.
  3. Просто добавьте точку останова после установки нового префайла и прочитайте значение, чтобы проверить, установлено ли оно сразу после него.

    SharedPreferences.Editor editor = getSettings().edit(); 
    editor.putBoolean(AppConstants.SETTING_BOOLEAN_HAS_SHOWN_HELP_STEPS, true); 
    editor.commit(); 
    Boolean hasSeenHelp = getSettings().getBoolean(AppConstants.SETTING_BOOLEAN_HAS_SHOWN_HELP_STEPS, false); 
    
  4. В некоторых крайних случаях можно даже реализовать SharedPreferences.OnSharedPreferenceChangeListener, чтобы увидеть, где ваши SharedPreferences меняются, чтобы избежать нежелательных привилегированные наборы.

+0

. 1) Я использую его только в том случае, если пользователь выходит из системы, но не где-либо еще. 2) Да, они имеют разные значения 3) Я сделал это. Когда вы запускаете приложение, «help» является ложным, после того, как вы видите его, он получает «true», тогда введение «false», после того как вы его видите, оно «истинно», когда вы переходите к следующей активности I проверьте оба, как ни странно, «help» - «false», а «intro» - true (хотя оба должны быть истинными). Когда вы перезагружаете приложение, оба являются «ложными», – Panos

Смежные вопросы