今天我以某种方式打破了我的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)
以前有人有这个问题吗?
好吧,我从来没有遇到过这个问题。
首先,我想找到问题的根本原因
你在评论中提到你没有给SharedPreferences
写很多值。我假设问题的根源是您的应用程序由IDE重新启动,而它可能正在忙着写入您的SharedPreferences
。
因为我不知道它是否会在生产环境中发生,或者它只是一个调试问题
根据我的经验,热重新加载在开发应用程序时总是非常错误,我认为你不幸,因此首选项文件已损坏。
我建议你玩你的应用程序的发布版本。如果问题仍然存在,这是不可能的,我会调查你的代码写到你的SharedPreferences
。如果可能的话,在这种情况下也要加上Exception
的支票。
保存时,您还可以获取操作的返回值。看看:http://developer.android.com/reference/android/content/SharedPreferences.Editor.html#commit()。我知道Android Studio可能会抱怨使用commit()
。但是,这是了解编写首选项是否成功的唯一方法。