今天,我已经以某种方式破坏了我的android应用程序。多次重新启动后,共享的首选项文件已损坏,如果没有崩溃,我将无法启动该应用程序。重新安装后才修复。
以前有人遇到过这个问题吗?
SharedPreferencesImpl: Cannot read
/data/user/0/fi.millisecond.canvas.flow/shared_prefs/fi.millisecond.canvas.flow.xml
org.xmlpull.v1.XmlPullParserException: Unexpected token (position:unknown @1:9 in java.io.InputStreamReader@b2a3b47)
at org.kxml2.io.KXmlParser.next(KXmlParser.java:436)
at org.kxml2.io.KXmlParser.next(KXmlParser.java:321)
at com.android.internal.util.XmlUtils.readValueXml(XmlUtils.java:1405)
at com.android.internal.util.XmlUtils.readMapXml(XmlUtils.java:740)
at android.app.SharedPreferencesImpl.loadFromDisk(SharedPreferencesImpl.java:150)
at android.app.SharedPreferencesImpl.-wrap1(Unknown Source:0)
at android.app.SharedPreferencesImpl$1.run(SharedPreferencesImpl.java:120)
答案 0 :(得分:0)
以前有人遇到过这个问题吗?
好吧,我从来没有遇到过这个问题。
首先,我想找到问题的根本原因
您在注释中提到您没有为SharedPreferences
写很多值。我认为问题的根源是您的应用程序可能正在忙于写入SharedPreferences
时被IDE重新启动。
因为我不知道它是否可能在生产环境中发生或 仅仅是调试问题
根据我的经验,在开发应用程序时,热重装总是很麻烦,而且我认为您很不幸,因此首选项文件已损坏。
我建议您稍微试用一下您的应用的发行版。如果问题仍然存在(这不太可能发生),我将调查您的写入您的SharedPreferences
的代码。在这种情况下,如果可能的话,还要添加一个Exception
的支票。
保存时,还可以获取操作的返回值。看一下:http://developer.android.com/reference/android/content/SharedPreferences.Editor.html#commit()。我知道Android Studio可能会抱怨使用commit()
。但是,这是知道编写首选项是否成功的唯一方法。