Rob*_*Rob 8 android 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","[]");
Run Code Online (Sandbox Code Playgroud)
我有同样的问题.幸运的是,我可以访问该设备,它帮助我找到了问题.首先,我研究了日志文件,发现错误:
W/SharedPreferencesImpl(31354): org.xmlpull.v1.XmlPullParserException: Map value without name attribute: string
Run Code Online (Sandbox Code Playgroud)
因此,首选项文件在某种程度上被破坏了.我在我的应用程序中使首选项文件可以访问:
SharedPreferences prefs = context.getSharedPreferences("main", Context.MODE_WORLD_READABLE);
Run Code Online (Sandbox Code Playgroud)
然后我将文件从设备拉到计算机
adb pull data/data/my.package.name/shared_prefs/main.xml c:\main.xml
Run Code Online (Sandbox Code Playgroud)
并检查首选项文件内容:
<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
<string>Paris,France</string>
<string name="HideStatusBar">1</string>
Run Code Online (Sandbox Code Playgroud)
第一个参数没有"name"属性.我检查了一个代码,发现在某些情况下,第一个参数是按照以下方式编写的:
SharedPreferences.Editor e = _Prefs.edit();
e.putString(null, paramValue);
e.commit()
Run Code Online (Sandbox Code Playgroud)
名称为空.我已修复错误,问题已消失.因此,琐碎的错误可以完全破坏首选项文件.
我们的Android应用程序遇到了同样的问题.我们的用户群相当大(数百万用户),根据我们的统计数据,大约0.2% - 0.3%的用户遇到了问题.它似乎并不是那么多,但我们的用户群却是成千上万的用户.
经过长时间搜索此问题的修复程序,我们已决定停止使用SharedPreferences我们的项目.我们使用的是简单的SQLiteDatabase,而且效果很好.
| 归档时间: |
|
| 查看次数: |
3937 次 |
| 最近记录: |