我在我的应用中使用了sharedpreference
,问题是当我强制关闭或从最近的应用程序中删除应用程序并再次打开它时,它给了我例外说Map Value without name attribute
和优先值被重置。没有名称属性的字符串值:字符串
我通过stackoverflow
找到了这个问题,我发现了一些类似的问题,如this和this。
下面这些问题后,我试图重现模拟器中的问题,但它没有给我任何例外或重置首选项XML。我通过DDMS从模拟器数据文件夹中提取了xml文件,所有内容都看起来不错。每个值都有一个非空的键名称。在真机上运行时
logcat的例外:所以在这里
03-17 14:59:55.099: W/SharedPreferencesImpl(8636): getSharedPreferences
03-17 14:59:55.099: W/SharedPreferencesImpl(8636): org.xmlpull.v1.XmlPullParserException: Map value without name attribute: string
03-17 14:59:55.099: W/SharedPreferencesImpl(8636): at com.android.internal.util.XmlUtils.readThisMapXml(XmlUtils.java:568)
03-17 14:59:55.099: W/SharedPreferencesImpl(8636): at com.android.internal.util.XmlUtils.readThisValueXml(XmlUtils.java:821)
03-17 14:59:55.099: W/SharedPreferencesImpl(8636): at com.android.internal.util.XmlUtils.readValueXml(XmlUtils.java:755)
03-17 14:59:55.099: W/SharedPreferencesImpl(8636): at com.android.internal.util.XmlUtils.readMapXml(XmlUtils.java:494)
03-17 14:59:55.099: W/SharedPreferencesImpl(8636): at android.app.SharedPreferencesImpl.loadFromDiskLocked(SharedPreferencesImpl.java:113)
03-17 14:59:55.099: W/SharedPreferencesImpl(8636): at android.app.SharedPreferencesImpl.access$000(SharedPreferencesImpl.java:48)
03-17 14:59:55.099: W/SharedPreferencesImpl(8636): at android.app.SharedPreferencesImpl$1.run(SharedPreferencesImpl.java:87)
是我要问:
有没有在移动设备代码或问题的任何问题?
shared = getSharedPreferences(PreferenceHandler.PREFS,Context.MODE_PRIVATE); Log.i(TAG,"preference object created"); last = shared.getInt(PreferenceHandler.LASTACTIVITY,PreferenceHandler.DEFAULTINT);
如果问题出在我的设备上,我应该怎么做来纠正它?
你是否每次提交()'更改?或者至少在你的'onPause()'中。 – Simon
是的。我在将值添加到sharedPreference的方法结束时提交它。同样的代码也在模拟器中工作。强制关闭之前,我检查模拟器的偏好xml文件并存储了该值。还有,承诺是否真的导致了这个问题?如果没有存储键值对,它将返回默认值,但在我的情况下,它是说,名称属性为空,我在日志中检查,并不是空。 – user2376920
你是对的,我只是想知道是否会有一些缓存导致一个损坏的文件,但如果你已经检查过XML,事实并非如此。这很奇怪。如果你找到答案,请回来张贴。 – Simon