1

私のアプリでは、アプリの状態を保存するために、などを使用getPreferences(MODE_PRIVATE)しています。データの量は多くありません-いくつかの文字列といくつかのブール値が可能です。データを保存するときにエラーが発生することはありませんが、データを読み取ると、XMLエラーが発生することがあります。たとえば、次のコードで値を読み取ろうとしています。putString()putBoolean()

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行目は上に示したものです。何が起こっているのか、そしてこれを修正する方法について何かアイデアはありますか?どうもありがとう。

4

2 に答える 2

1

しばらくこれに苦労した後、エミュレーター(異なるバージョン)と2つの異なる受話器の両方でこのエラーが発生した後、データを共有設定に保存することをやめました。ブール値と整数値は共有設定に保持しますが、文字列データをファイルに保存します。これは毎回機能し、問題が発生することはありません。

注意すべき点の1つは、文字列の一部が非常に長く、場合によっては数千文字になる可能性があることです。多分それは問題と関係がありました。

于 2012-06-21T08:13:22.783 に答える
-1

デバイスを工場出荷時にリセットしてから再試行してください。私は同様の問題を抱えていました、そしてこれは私のために働きました

于 2012-06-21T01:14:33.013 に答える