2014-06-12 62 views
5

我使用SharedPreferences将服务器数据保存在本地,当设备进入关闭状态时,SharedPreferences中的值丢失,再次从服务器下载。如何保存共享首选项值甚至设备关闭?

public void saveCollection(Context context) 
{ 
    SharedPreferences settings = context.getSharedPreferences(context.getString(R.string.restore_values), 0); 
    SharedPreferences.Editor e = settings.edit(); 
    e.clear(); 
    e.putStringSet(context.getString(R.string.collection), collection); 
    e.commit(); 
} 

我已经这样做了,但没有运气。

+0

你怎么知道他们没有保存?您可能需要将代码发布到您尝试检索它们的地方,因为如果您做得正确,它们将**在设备关闭时存储这些值。 – codeMagic

+1

你确定这不应该存储在SQLite吗?就是想。 SQLite示例在这里:http://stackoverflow.com/questions/24142830/create-offline-sqlite-database-for-groups/24144236#24144236 另外,我不确定您获得的首选项是否实际上是Application-具体。尝试从ApplicationContext中打开SharedPreferences。 – EpicPandaForce

+0

现在,通过“设备关闭”,我假设你的意思是睡眠模式,对吗? –

回答

-3

共享首选项始终存储在文件系统中,因此它们始终在设备关闭时保存。你的问题更可能在阅读他们,而不是存储他们 - 尤其是因为你不只是打开应用程序的默认共享首选项。

+5

这是否意味着要回答?如果是这样,我错过了答案。 – WarrenFaith

+0

没有。他表示,当设备关闭时,他失去了他的共同偏好。我说这没有办法发生,他可能在重新启动时错误地阅读它们。 –

+3

仍然你的“答案”不提供任何有关如何阅读它们的知识。说他只是“做错了什么”,并说他的一个假设是不正确的,这仅仅是对你的文本的限制。我宁愿将其看作是评论而不是答案。因此,我建议改变它,否则我会举报它,社区将决定。 – WarrenFaith

0

看起来你不是在访问正确的喜好:

final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); 

(假设“本”是一个上下文)通过一个非常具体的生命周期

0

每个活动都按在the developer documentation定义。读完之后,您可能会发现每次从焦点获取Activity时,都会调用内置的onPause()方法。考虑到这一点,你可以添加到您的活动如下:

@Override 
public void onPause() { 
    super.onPause(); // Always call the superclass method first 

    // You can call saveCollection() here and now it will always be called when 
    // the activity is taken away (assuming your app doesn't force close) 
    saveCollection(this); 
} 
0

就个人而言,我用这个方法来获取SharedPreferences对象:

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this); 

我想你应该叫saveCollection()在onPause()