Ошибка XML при попытке прочитать строку из настроек в Android - PullRequest
1 голос
/ 22 марта 2012

В моем приложении я использую getPreferences(MODE_PRIVATE) с putString(), putBoolean() и т. Д. Для сохранения состояния приложения. Объем данных невелик - возможно несколько строк и пара логических значений. Я никогда не получаю никаких ошибок при сохранении данных, однако, когда я читаю их, иногда я получаю ошибки XML. Например, я пытаюсь прочитать значения с помощью этого кода:

String cr = getPreferences(MODE_PRIVATE).getString("user-input-" + block.getID(), "");

Иногда это работает просто отлично, а в других случаях выдает такую ​​ошибку:

03-22 12:42:25.846: W/ApplicationContext(406): getSharedPreferences
03-22 12:42:25.846: W/ApplicationContext(406): org.xmlpull.v1.XmlPullParserException: Error parsing document. (position:line -1, column -1) caused by: org.apache.harmony.xml.ExpatParser$ParseException: At line 3, column 29: not well-formed (invalid token)
03-22 12:42:25.846: W/ApplicationContext(406):  at org.apache.harmony.xml.ExpatPullParser$ByteDocument.flush(ExpatPullParser.java:959)
03-22 12:42:25.846: W/ApplicationContext(406):  at org.apache.harmony.xml.ExpatPullParser$Document.pump(ExpatPullParser.java:770)
03-22 12:42:25.846: W/ApplicationContext(406):  at org.apache.harmony.xml.ExpatPullParser$Document.dequeue(ExpatPullParser.java:814)
03-22 12:42:25.846: W/ApplicationContext(406):  at org.apache.harmony.xml.ExpatPullParser.next(ExpatPullParser.java:303)
03-22 12:42:25.846: W/ApplicationContext(406):  at com.android.internal.util.XmlUtils.readValueXml(XmlUtils.java:674)
03-22 12:42:25.846: W/ApplicationContext(406):  at com.android.internal.util.XmlUtils.readMapXml(XmlUtils.java:469)
03-22 12:42:25.846: W/ApplicationContext(406):  at android.app.ApplicationContext.getSharedPreferences(ApplicationContext.java:340)
03-22 12:42:25.846: W/ApplicationContext(406):  at android.content.ContextWrapper.getSharedPreferences(ContextWrapper.java:146)
03-22 12:42:25.846: W/ApplicationContext(406):  at android.app.Activity.getPreferences(Activity.java:3444)
03-22 12:42:25.846: W/ApplicationContext(406):  at com.mypackage.BlockActivity$SetupTask.doInBackground(BlockActivity.java:79)
03-22 12:42:25.846: W/ApplicationContext(406):  at android.os.AsyncTask$2.call(AsyncTask.java:185)
03-22 12:42:25.846: W/ApplicationContext(406):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
03-22 12:42:25.846: W/ApplicationContext(406):  at java.util.concurrent.FutureTask.run(FutureTask.java:137)
03-22 12:42:25.846: W/ApplicationContext(406):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068)
03-22 12:42:25.846: W/ApplicationContext(406):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561)
03-22 12:42:25.846: W/ApplicationContext(406):  at java.lang.Thread.run(Thread.java:1096)

Строка 79 в моем коде показана выше. Есть идеи о том, что происходит и как это исправить? Большое спасибо.

Ответы [ 2 ]

1 голос
/ 21 июня 2012

Поработав некоторое время с этой ошибкой на эмуляторе (разные версии) и на двух разных телефонах, я отказался от сохранения данных в общих настройках.Я по-прежнему сохраняю логические и целочисленные значения в общих префиксах, но сохраняю строковые данные в файл.Это работает каждый раз и никогда не доставляет мне никаких проблем.

Следует отметить, что некоторые строки могут быть очень длинными, возможно, несколько тысяч символов.Может быть, это как-то связано с проблемой.

0 голосов
/ 21 июня 2012

Повторите попытку после заводской настройки устройства. У меня была похожая проблема, и это сработало для меня

...