关闭设备或终止应用后,共享首选项会丢失

时间:2012-03-21 11:35:24

标签: android sharedpreferences

有很多与共享偏好和替代方案相关的问题。 我的问题:当我关闭设备或杀死应用程序时,共享首选项会丢失。 请注意,我的代码实际上是在使用Acer A500。但是在我的摩托罗拉Xoom MZ604上它无法正常工作!!

首先,我尝试在onCreate中恢复我的HashSet。这个方法是肯定调用的,并以单例形式实现。

public boolean restoreCollection(Context context){
    SharedPreferences settings = context.getSharedPreferences(context.getString(R.string.restore_values), 0);
    if(settings.getStringSet(context.getString(R.string.collection), null) != null){
        collection = settings.getStringSet(context.getString(R.string.collection), null);
        return true;
    } 
    collection = new HashSet<String>();
    return false;
}

通过调用onDestroy,我保存了HashSet。即使没有给出,这个方法是肯定调用的,但是在任何情况下,首选项都会丢失,我试图将它保存在onPause中,结果相同。

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

共享首选项和XOOM设备是否有任何问题,或者我是唯一的问题?也许我的代码有点可疑,但数据不会在我的Acer Tablet上丢失。

我也尝试过PreferenceManager.getDefaultSharedPreferences(context)来获取SharedPreferences的对象

感谢您的帮助, 克里斯

3 个答案:

答案 0 :(得分:13)

我找到了一个既可以在我的Acer上也可以在我的XOOM设备上运行的解决方案:在提交新数据之前,你必须在编辑器上调用clear():

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

答案 1 :(得分:13)

使用带有SharedPreferences的字符串集时,我遇到了完全相同的问题。我发现了为什么会这样,以及如何解决它。

阅读SharedPreferences.getStringSet (String key, Set defValues)

的API文档非常重要

基本上不要修改或触摸返回的Set!如果你这样做,你将获得SharedPreferences的奇怪结果。 :)

享受!

答案 2 :(得分:3)

对于运行标准Samsung Galaxy S的设备Froyo 2.2.1,您的问题似乎与discussed here相同。他们讨论的一些印象:

日志显示:

  

01-19 12:08:56.856 W / ApplicationContext(4563):尝试阅读首选项文件   /dbdata/databases/com.mobilemerit.ultimatefaves/   shared_prefs / com.mobilemerit.ultimatefaves_preferences.xml 没有   许可

一种可能的解决方法似乎是:

  

我的用户似乎有同样的症状。

     他给我发了电子邮件,说他必须为他的手机重置工厂   其他原因,他从市场上重新安装了这个应用程序   在重置之前没有帮助),现在一切都按预期工作。

另一种解决方法:

  

我的2.2.1 Galaxy S(root)也有同样的问题,我解决了   删除\ dbdata \ databases中的app文件夹(com.xxx)。是否   有人在另一部手机上遇到同样的问题吗?

this guy实际上找到了它的原因:

  

我安装了我的应用程序(WidgetLocker),它得到了app_81,然后是我   然后使用“adb uninstall com.teslacoilsw.widgetlocker”卸载   重新安装并发现我的偏好已经持续了整个过程   卸载,但没有权限被拒绝错误。我再次卸载了   同样,这次我去了Market并安装了Androidify。   这是事情变得有趣的时候:(...)

     

所以Androidify 得到了我的uid,现在我的偏好属于   它们即可。 (...)

     

我们被搞砸了......

此问题有错误报告:http://code.google.com/p/android/issues/detail?id=14359

谷歌拒绝了这个错误,因为它实际上是供应商对该设备进行修改所导致的错误。

App“Beautiful Widgets”的作者为其用户提供了以下建议:

  

** SAMSUNG GALAXY S&amp; ANDROID 2.2 **
  Samsung Update中存在一个错误,阻止保存设置文件。你需要工厂   重置手机(...)

所以这应该有所帮助。

如果您的Xoom设备上出现同样的问题,请回复此答案。