2016-03-06 123 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