2011-09-29 33 views
1

我正在使用服務下載並檢索URL列表並將它們放入sharedpreference中。服務沒有爲主要活動保存SharedPreference?

有了這個..

SharedPreference images_article = this.getSharedPreferences("images_articles", MODE_WORLD_READABLE); 
editor.putString("article2", urlImage2); 
editor.putString("article3", urlImage2); 
editor.commit(); 

然後在我的Main.Activity我拉的網址從偏好。

SharedPreference images_article = this.getSharedPreferences("images_articles", MODE_WORLD_READABLE); 
urlImage2 = images_article.getString("article2", "NO ARTICLE AVAILABLE"); 
urlImage3 = images_article.getString("article3", "NO ARTICLE URL AVAILABLE"); 

唯一的問題是由於某種原因,它不是共享偏好的腦子裏想的,因爲主要活動是裝載舊的URL的現在已經改變。但在服務中,我記錄了正在檢索的URL,並且它們被更新,但由於某種原因,在主要活動中它仍然加載舊的。並即時檢索他們從相同的偏好。

有什麼我失蹤或更好的方式來做到這一點?任何幫助將是偉大的!

+0

你是如何獲得'editor'對象? –

回答

4

我正在運行與我的活動和服務之間的SharedPreferences類似的問題。我結束了不使用默認,並在活動中使用我自己的一組文件名

和服務,我設置

private static final String PREFERENCE_NAME = "MyPreferenceFileName"; 

然後得到的值:

SharedPreferences pref = getSharedPreferences(PREFERENCE_NAME, Activity.MODE_PRIVATE); 
pref_checked = pref.getBoolean("checked", true); 

,並設置值:

SharedPreferences pref = getSharedPreferences(PREFERENCE_NAME, Activity.MODE_PRIVATE); 
SharedPreferences.Editor editor = pref.edit(); 
editor.putBoolean("checked", value); 
editor.commit(); 

這使我可以在我的服務和活動中使用相同的get和put邏輯解決任何問題。我希望這有助於。

+1

雖然這可能有效,但可以在整個活動和服務中使用默認的共享首選項。默認的SP只是使用一個特定的名字 - 沒有什麼特別的。 –

+0

在這裏與@DavidCaunt達成一致。我在類似的問題上運行,似乎是時間問題。我使用設置值的主要活動會多次獲取舊值,但當有任何恢復時,它會得到正確的值。我相信我的主要活動是在另一個人保存它之前讀取SP,或者以某種方式緩存這些值。 有人有什麼想法嗎?我嘗試獲取恢復方法的價值。 –

2

由於您訪問的環境不同,可能會發生這種情況。我不是很肯定,雖然,但你可以試試這個:

SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context); 
SharedPreferences.Editor editor = sp.edit(); 

使用此代碼,當您嘗試訪問SharedPreferences,也就是從ServiceActivity兩者。這可能會解決你的問題。

+0

通過在Android Wear上運行的活動和服務處理此問題。由於某些原因,SharedPreferences對象在服務和活動中不同。上面的解決方案解決了問題。我不確定爲什麼背景不同。 –

1

在活動和服務類都使用這似乎爲我工作,因爲它現在應該使用相同的上下文來訪問應用程序SharedPreferences:

SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());