服务没有为主要活动保存SharedPreference?

时间:2011-09-29 00:30:03

标签: android sharedpreferences android-service

我正在使用服务下载并检索网址列表并将其放入共享偏好中。

有了这个..

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

然后在我的Main.Activity中,我将url从偏好中拉出来。

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");

唯一的问题是由于某种原因它不会进入共享首选项,因为Main活动正在加载现在已更改的OLD URL。但是在服务中我记录了被检索的URL并且它们被更新但是由于某些原因它在主要活动中仍然加载旧的。并且我从相同的偏好中检索它们。

我有什么遗漏或更好的方法吗?任何帮助都会很棒!!

3 个答案:

答案 0 :(得分:4)

我的Activity和Service之间的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 :(得分:2)

由于您正在访问的上下文不同,可能会发生这种情况。我不是很确定,但你可以试试这个:

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

每当您尝试访问SharedPreferences时,请使用此代码,即ServiceActivity。这可能会解决您的问题。

答案 2 :(得分:1)

在Activity和Service类中使用它似乎对我有用,因为它现在应该使用相同的Context来访问应用程序SharedPreferences:

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