2014-01-16 200 views
0

我想在我的應用程序中使用SharedPreferences,但它似乎並沒有工作。SharedPerferences似乎並沒有工作

首先,我聲明SharedPreferences作爲活動的全局變量,我打算使用它們:

SharedPreferences prefs; 

然後,我設置的onCreate默認SharedPreferences:

prefs = getSharedPreferences("urnikSp", 0); 
SharedPreferences.Editor editor = prefs.edit(); 
editor.putBoolean("schudeleDownloaded", false); 
editor.commit(); 

然後我當某個動作完成時更改布爾值:

prefs.edit().putBoolean("schudeleDownloaded", true).commit(); 

然後在相同的活動(它重新啓動時),我檢查中的onCreate這樣的布爾值:

boolean schudeleDownloaded = prefs.getBoolean("schudeleDownloaded", false); 
if (!schudeleDownloaded){ 
    new PopulateDatabase().execute(); 
} 

即使我清楚在完成某個動作時,如果設置新的值設置爲「真」上面看到的語句仍然執行,因爲布爾值似乎仍然是假的。

我在做什麼錯?

+0

這似乎是正確的......你確定這個代碼是一個你寫了嗎? – Massimo

+0

請發佈您的整個onCreate()函數。 – Melquiades

+0

我想說你的活動被破壞了,第二次叫onCreate將它設置爲false。 – s1m3n

回答

0

如果你重新創建活動中,onCreate()方法將被再次調用,所以我覺得你改變他的值回假

-1

您必須創建一個單獨的SharedPreferences.Editor實例。因此,而不是這樣做:

prefs.edit().putBoolean("schudeleDownloaded", true).commit(); 

試試這個:

SharedPreferences.Editor editor = prefs.edit(); 
editor.putBoolean("schedeleDownloaded", true); 
editor.commit(); 
+2

這個答案是錯誤的。我經常使用第一種方法。第二種方法也可以,但這不是問題的答案 – ScouseChris

+0

@ScouseChris嗯。我實際上修復了SharedPrefernences沒有提交的問題。但它可能與早期的Android版本有關?我會檢查我是否可以找到答案,因爲我在那時問過它。這個答案實際上幫助我解決了這個問題。 –

+0

有趣的是,'SharedPreferences.Editor'上的方法都應返回該編輯器的實例,以便可以像初始代碼一樣鏈接調用。 – ScouseChris

0

讓我做胡亂猜測。因爲當你重新啓動時,你將它重新設置爲false ....它在onCreate函數中。