2012-03-22 10 views
1

私のアプリではgetPreferences(MODE_PRIVATE)putString()putBoolean()などを使用してアプリの状態を保存しています。データの量はそれほど多くありません - いくつかの文字列とブール値の組み合わせが可能です。データを保存するときにエラーが発生することはありませんが、読んだときにXMLエラーが発生することがあります。例えば、私はこのコードの値が読みしようとしています:アンドロイドの設定から文字列を読み込もうとすると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私のコードであります上記のもの。何が起こっているか、どのようにこれを修正するためのアイデア?どうもありがとう。

+0

ときどき間違って設定名を作成することがありますか? –

+0

@Alex:残念ながら、そうではありません。 'block.getID()'をハードコードされた '1 'に置き換えようとしましたが、結果は変わりませんでした。 –

答えて

1

エミュレータ(異なるバージョン)と2つの異なるハンドセットでこのエラーが発生した後、私は共有設定にデータを保存していませんでした。私はまだ共有のprefsにブール値と整数値を保持しますが、文字列データをファイルに保存します。これは毎回動作し、私に何の問題もゲームすることはありません。

文字列の一部が非常に長く、おそらく数千文字になることがあります。たぶんそれは問題と関係がありました。

-1

デバイスを工場出荷時の状態にリセットした後に再試行してください。私も同様の問題があり、これは私のために働いた

+0

ありがとうございますが、これはオプションではありません。エミュレータと2つの異なるハンドセットで時々起こることがあります。私は、「あなたのデバイスを工場にリセットする」というアプリに問題があることを顧客に伝えることはできません。これは良いアドバイスではありません、申し訳ありません。 –

関連する問題