Приложение аварийного завершения общих настроек - PullRequest
0 голосов
/ 05 сентября 2018

Сегодня я как-то сломал свое приложение для 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)

1 Ответ

0 голосов
/ 05 сентября 2018

Кто-нибудь имел эту проблему раньше?

Ну, у меня никогда не было этой проблемы.

Прежде всего, я хотел бы найти основную причину проблемы

Вы упомянули в комментариях, что вы не пишете много значений в SharedPreferences. Я предполагаю, что корень проблемы в том, что ваше приложение было перезапущено IDE, когда оно могло быть занято записью в ваш SharedPreferences.

потому что я не знаю, могло ли это произойти в производственной среде или это только проблема отладки

По моему опыту, во время разработки приложений горячая перезагрузка всегда вызывает ошибки, и я думаю, что вам не повезло, поэтому файл настроек был поврежден.

Я бы порекомендовал вам немного поиграть с релизной версией вашего приложения. Если проблема не исчезнет, ​​что маловероятно, я изучу ваш код, который записывает в ваш SharedPreferences. Если возможно, добавьте проверку для Exception также в этом случае.

При сохранении вы также можете получить возвращаемое значение операции. Взгляните на: http://developer.android.com/reference/android/content/SharedPreferences.Editor.html#commit(). Я знаю, что Android Studio может жаловаться на использование commit(). Тем не менее, это единственный способ узнать, удалось ли написать ваши предпочтения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...