Android-在共享首选项中保存已停止工作

Android-在共享首选项中保存已停止工作,android,sharedpreferences,Android,Sharedpreferences,在我的应用程序中,我使用了一年多的“共享首选项”来存储一些布尔值(例如,如果用户看到了简介页面)。现在我又添加了一个设置(如果用户看到了帮助页面!),所有设置都停止工作了 我尝试将“提交”改为“应用”,但运气不佳。仅仅增加一个共享的偏好,怎么能让它停止工作呢?有任何财产限制吗 我的代码: public SharedPreferences getSettings() { SharedPreferences settings = getSharedPreferences(AppConstan

在我的应用程序中,我使用了一年多的“共享首选项”来存储一些布尔值(例如,如果用户看到了简介页面)。现在我又添加了一个设置(如果用户看到了帮助页面!),所有设置都停止工作了

我尝试将“提交”改为“应用”,但运气不佳。仅仅增加一个共享的偏好,怎么能让它停止工作呢?有任何财产限制吗

我的代码:

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 {

它可能是
SharedReferences
文件的内存限制,通常会出现
OutOfMemoryException
。我想如果发生类似的事情,你可能会在代码中看到它,除非你不是在另一个
线程中读/写。您的SharedReferences文件以键值对的数量计有多大?

您的方法很好,应该可以很好地工作。检查几件事以防万一:

  • 确保在错误地保存了首选项后,不会调用
    SharedReferences
    编辑器的方法
  • 确保常量
    AppConstants。设置布尔值\u显示了\u帮助\u步骤
    AppConstants。设置布尔值\u显示了\u介绍\u步骤
    具有不同的值,因为前者可能会错误地重叠第二个步骤
  • 只需在设置新的pref之后添加一个断点,然后读取该值以检查它是否正好在它之后设置

    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);
    
  • 在某些极端情况下,您甚至可以实现查看您的SharedReference在何处被更改,以避免不需要的pref集


  • 现在编辑时是否意外删除了任何行?:)@BobMalooga-这部分是伪代码。问题是get“getBoolean”总是返回“FALSE”,而我之前保存了“true”。1)我只在用户注销时使用它,而不在其他任何地方使用它。2) 是的,他们有不同的价值观3)我做到了。当你启动应用程序时,“帮助”是假的,当你看到它后,它变为“真”,然后介绍是“假”,当你看到它后,它是“真”,当你移动到下一个活动时,我检查两者,奇怪的是,“帮助”是“假”和“介绍”是真的(而两者都应该是真的)。当您重新启动应用程序时,两者都为“false”