2011-09-29 18 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());