有很多与共享偏好和替代方案相关的问题。 我的问题:当我关闭设备或杀死应用程序时,共享首选项会丢失。 请注意,我的代码实际上是在使用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的对象
感谢您的帮助, 克里斯
答案 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设备上出现同样的问题,请回复此答案。