2016-03-06 120 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”,而我在 – Panos

回答

0

它可以在你的SharedPreferences文件内存限制,通常这种带有一个OutOfMemoryException。我猜如果这样的事情发生,你可能会在你的代码中看到它,除非你不在另一个Thread中读/写。您的SharedPreferences文件在多个键值对中有多大?

0

你的方法很好,他们应该完美地工作。检查几件事情以防万一:

  1. 确保你不叫SharedPreferences编辑clear()remove()方法错误地保存您的首选项之后。
  2. 确保常量AppConstants.SETTING_BOOLEAN_HAS_SHOWN_HELP_STEPSAppConstants.SETTING_BOOLEAN_HAS_SHOWN_INTRO_STEPS具有不同的值,因为前者可能会错误地重叠第二个值。
  3. 只需在设置新的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); 
    
  4. 在某些极端情况下,你甚至可以实现SharedPreferences.OnSharedPreferenceChangeListener,看看你的SharedPreferences被更改,以避免不必要的PREF套。

+0

之前保存了“true”。1)仅在用户注销时使用它,但不在其他地方使用。 2)是的,他们有不同的值 3)我做到了。当你启动应用程序时,“帮助”是错误的,当你看到它变得“真”,然后介绍是“假”,看到它后,它是“真实的”,当你移动到下一个灵活性I检查两个,奇怪的是,“帮助”是“假”和“介绍”是真实的(虽然两者都应该是真的)。当你重新启动应用程序时,两者都是“假” – Panos