2011-05-10 50 views
7

我的应用程序在SharedPreferences中存储简单设置,它工作正常。 但是,对于一个下载我的应用程序的人有问题。 SharedPreferences中的设置在关闭和重新加载应用程序之间正在丢失。保存在SharedPreferences中的用户设置在重新加载应用程序之间删除或丢失

他的手机某处是否存在权限问题,阻止了会话之间的数据保存?

有没有人遇到过这个问题,或知道为什么会发生这种情况? 我很难调试它,我不知道从哪里开始。

// I'm using SharedPreferences Like so: 
prefs = getSharedPreferences(this.getString(R.string.prefs_name), 0); 
SharedPreferences.Editor editor = prefs.edit(); 
editor.putString("accounts", accounts); 
editor.commit(); 

//retrieving stored information like: 
SharedPreferences prefs = getSharedPreferences(this.getString(R.string.prefs_name), 0); 
String accounts = prefs.getString("accounts","[]"); 
+0

你使用的是DefaultSharedPreferences?如果没有,你确定你使用的字符串键在使用之间是否相同?没有代码片段就很难知道你做错了什么。 – 2011-05-10 20:08:02

+0

嘿,不只是SharedPreferences,我使用相同的密钥,应用程序适用于数千人,只是这一个人。依靠这些信息的应用程序的其余部分功能完美,直到他关闭应用程序。 – Rob 2011-05-10 20:12:13

+0

它可能是一个存储空间问题? – OceanBlue 2011-05-10 20:18:47

回答

6

我们遇到与我们的Android应用程序相同的问题。我们的用户数量非常庞大(数百万用户),根据我们的统计数据,用户遇到的问题约为0.2%-0.3%。这似乎不是那么重要,但是我们的用户群拥有数千用户。

经过长时间搜索解决此问题,我们决定停止为我们的项目使用SharedPreferences。我们正在使用简单的SQLiteDatabase,而且工作得很好。

+1

感谢您的输入。我一直在我的应用程序中使用SQLiteDatabase。 SharedPreferences不能被信任。 – Rob 2012-10-10 10:17:12

+1

虽然没有解释SharedPreferences的问题,但仍然接受答案,这是使用SharedPreferences解决此问题的唯一合理方法。 – Rob 2012-10-10 10:21:13

8

我有同样的问题。幸运的是,我可以访问该设备,并帮助我发现问题。首先,我研究了日志文件并发现错误:

W/SharedPreferencesImpl(31354): org.xmlpull.v1.XmlPullParserException: Map value without name attribute: string 

因此,偏好文件在某种程度上已损坏。我已经预置文件世界可访问我的应用程序:

SharedPreferences prefs = context.getSharedPreferences("main", Context.MODE_WORLD_READABLE); 

然后我拉文件,从设备到计算机

adb pull data/data/my.package.name/shared_prefs/main.xml c:\main.xml 

,并检查首选项文件内容:

<?xml version='1.0' encoding='utf-8' standalone='yes' ?> 
<map> 
<string>Paris,France</string> 
<string name="HideStatusBar">1</string> 

第一个参数没有“名称”属性。我已经检查代码,发现在某些情况下,第一个参数是写在后续的方式:

SharedPreferences.Editor e = _Prefs.edit(); 
e.putString(null, paramValue); 
e.commit()  

名称为空。我修复了错误,问题消失了。所以,微不足道的错误可以完全损坏首选项文件。

0

您应该对您的应用程序进行更新,以临时保存,清除并重新创建首选项文件。

我有类似的情况。一些用户不仅把他们的首选项文件搞乱了,而且还有他们的SQL数据库。你不能真正要求人们删除并重新安装,他们可能会丢失数据。但是,您的应用可以先自动备份,删除损坏的文件,然后全部放回。

相关问题