2012-08-27 72 views
4

我正在從一個從某個窗口小部件啓動的活動中爲共享首選項存儲一些值。如果我從從同一個小部件開始的服務中檢索該值,它不是更新的那個。我獲得了共享首選項中的前一個值。即使我檢查共享首選項xml中的值,我看到更新的那裏。 這是爲什麼發生。我知道小部件和活動是兩個過程,是這個原因嗎? ​未獲取服務中共享首選項的更新值

SharedPreferences preferences = getSharedPreferences("preferences_target_value", Context.MODE_PRIVATE); 

String targetValue = preferences.getString("preferences_target_value", "0"); 

System.out.println("targetValue "+targetValue);` 
+0

您是如何從服務中檢索它的?發佈相關代碼? – iTurki

+0

編輯該問題。請看看 – Kamalone

+0

當您在活動中設置值時,您是否使用過相同的名稱'preferences_target_value'和'Mode'? – iTurki

回答

5

這些值在每個進程中被緩存。

如果您在Android> 2.3上運行,則在致電getSharedPreferences()時必須指定MODE_MULTI_PROCESS。如果你使用Android < 2.3,那麼它應該正常工作。如果你運行的是Android 2.3,那麼共享首選項有一個錯誤,無論你做什麼,它都不能在多個進程中正常工作。

+0

訪問共享首選項時,可以調用'getSharedPreferences(String name,int mode);'。只需指定'MODE_MULTI_PROCESS'作爲第二個參數。 –

1

使用commit()更新值後,調用此有你在編輯器中進行任何更改

prefsEditor.commit(); 

改變你的代碼,而不是這個

SharedPreferences preferences = getSharedPreferences("preferences_target_value", Context.MODE_PRIVATE); 

這個

SharedPreferences preferences = getSharedPreferences("preferance name", Context.MODE_PRIVATE); 
+0

我正在提交。如果我正在重新安裝小部件,我正在獲取服務中更新的值。在共享偏好xml我可以新的價值。 – Kamalone

+0

我的偏好名稱和值相同。並且它不是檢索問題,因爲我使用相同的代碼獲取正確的值 – Kamalone