如何在设备关闭时保存共享首选项值?

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();
}

我已经尝试了,但没有成功。

你怎么知道它们没有被保存?如果你已经正确地完成了操作,当设备关闭时,它们存储这些值。你可能需要发布代码以便检索它们。 - codeMagic
1
你确定这个不应该存储在SQLite中吗?我只是想知道。SQLite示例在这里:http://stackoverflow.com/questions/24142830/create-offline-sqlite-database-for-groups/24144236#24144236另外,我不确定你获取的Preferences实际上是否是应用程序特定的。试着从ApplicationContext打开SharedPreferences。 - EpicPandaForce
你在运行应用程序的过程中关掉它了吗? - Andrew Schuster
应用程序中间是什么意思?终止和关闭。 - Srinivasan Selvaraj
1
这个问题似乎不符合主题,因为它没有提供必要的代码来提供清晰的解决方案。 - codeMagic
显示剩余2条评论
4个回答

0

个人而言,我使用以下方法获取SharedPreferences对象:

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);

我认为你应该在onPause()中调用saveCollection()。


0

看起来你没有访问正确的偏好设置:

final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);

(假设“this”是一个上下文)


0

每个活动都会按照 开发者文档 中定义的非常具体的生命周期进行。阅读后,您可能会发现每当一个 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);
}

-3

共享首选项始终存储在文件系统中,因此当设备关闭时它们总是被保存。你的问题更可能出现在读取它们而不是未存储它们上 - 特别是因为你并没有打开应用程序的默认共享首选项。


5
这是否意味着这是一个答案?如果是的话,我似乎没有看到答案。 - WarrenFaith
完全不是这样。他说当设备关闭时,他会失去他的共享首选项。我认为这不可能发生,他可能在重新启动时读取它们时出现了错误。 - Gabe Sechan
3
尽管你的“回答”指出了他做错了什么,并且说他的某个假设是不正确的,但它并没有提供任何关于如何阅读它们的知识。我认为这更像是一条评论而不是一个答案。因此,我建议你修改它,否则我会标记它,并由社区决定。 - WarrenFaith

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接