我正在使用服务下载并检索网址列表并将其放入共享偏好中。
有了这个..
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并且它们被更新但是由于某些原因它在主要活动中仍然加载旧的。并且我从相同的偏好中检索它们。
我有什么遗漏或更好的方法吗?任何帮助都会很棒!!
答案 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
时,请使用此代码,即Service
和Activity
。这可能会解决您的问题。
答案 2 :(得分:1)
在Activity和Service类中使用它似乎对我有用,因为它现在应该使用相同的Context来访问应用程序SharedPreferences:
SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());