6

Android 3.0 以降ではエラーは発生しませんが、Android 2.2、2.3.3 でのみ、小さな XML ファイルを 経由XmlPullParserで解析しようとすると、アプリがエラーで中断します。

org.xmlpull.v1.XmlPullParserException: PI must not start with xml 
(position:unknown @1:5 in java.io.InputStreamReader@40568770) 

エラーで言及されているPIは何ですか???

これにより、XML ファイルの最初の行 ( <?xml version="1.0" encoding="utf-8"?>) が発生する可能性があることがわかりましたが、これが下位の Android バージョンで発生する理由はわかりませんでした。

これがエラーの原因 (XML ファイルの最初の行) である場合、どうすれば修正できますか?


a) Web サーバーの管理者に XML の変更を依頼する必要がありますか? はいの場合、彼は XML で何を変更する必要がありますか?
b) ?InputStreamを使用した部分文字列BufferedReader

どういうわけか、2番目のアプローチは、弱いAndroid携帯で余分な遅延を引き起こすと思います.

編集

デバッガーから XML コンテンツを取り出したところ、最初の like が で終わり\r\n、次に次の文字が始まることがわかりました。これはあなたに何か言いますか?

XML ファイルは次のようになります。これは小さいもので、アプリがクラッシュする視覚的な理由はありません。

<?xml version="1.0" encoding="utf-8"?>
<song>
  <artist>Pink Floyd</artist>
  <title>Shine On You Crazy Diamond</title>
  <picture>http://www.xxyz.com/images/image.jpg</picture>
  <time>Fri, 23 Nov 2012 11:22:31 GMT</time>
</song>

これは、この XML から取得された InputStream がどのように見えるかです (最初の文字のみ)。

お知らせ下さい!!!

4

3 に答える 3

1

アプリで使用しているデータ ファイルで同じ問題が発生していました。Android 2.3.*でこの例外があり、問題はUTF-8 BOMだったので、Windowsで見つけた簡単な解決策はNotepad ++ツールを使用することで、ファイルエンコーディングをBOMなしでUTF-8に変換し、それでおしまい。

于 2013-11-26T16:30:45.613 に答える
1

xml パーサー ソースを確認した後、私の場合は「77u/」(base64) の応答の先頭にあるバイト オーダー マーカーが原因で問題が発生しているようです。ストリームを文字列に変換せずに直接解析すると、パーサーはこれを正しく破棄します。

たとえば、代わりに

String xml = new String(xmlData, "UTF-8");
KXmlParser parser = new KXmlParser();
parser.setInput(new StringReader(xml));

使用する

KXmlParser parser = new KXmlParser();
parser.setInput(new ByteArrayInputStream(xmlData), null);

別の方法として、最初の「<」まで部分文字列にすることもできます

于 2016-03-03T09:37:15.357 に答える