0

XmlPullParser次のようなコードを使用して、リモート XML ファイルからコンテンツを取得しています。

    factory = XmlPullParserFactory.newInstance();
    factory.setNamespaceAware(true);
    parser = factory.newPullParser();
    parser.setInput(xml, "UTF-8");

    eventType = parser.getEventType();

    // process tag while not reaching the end of document
    while (eventType != XmlPullParser.END_DOCUMENT) {
        switch (eventType) {
            // at start of document: START_DOCUMENT
            case XmlPullParser.START_DOCUMENT:
                break;
            // at start of a tag: START_TAG
            case XmlPullParser.START_TAG:
                //get tag name
                String tagName = parser.getName();
                if (tagName.equalsIgnoreCase("item")) {
                    listObject = new MyClass();
                } else if (tagName.equalsIgnoreCase("yy")) {
                    listObject.setYY(parser.nextText());
                } else if (tagName.equalsIgnoreCase("zz")) {
                    listObject.setZZ(parser.nextText());
                } 
                break;
        }
        // jump to next event
        eventType = parser.next();

ご覧のとおり、このコードには新しいものや奇妙なものは何もありません。

フェッチされた XML コンテンツが Android 3.0 以降のシステムでこのパーサーに到達すると、次の画像のように「通常」のように見えます。

XML ファイルの内容が正しく取得されていることがわかります。

しかし、同じプロジェクトを Android 2.3.3 以前のデバイスに接続すると、異なる結果が得られます! Android 2.2 デバイスで撮影した同じ画像を見てください。

これらの奇妙な文字が表示されます\uoooo。また、bufferアイテムが に変更されましたtxtBuf!

これはどういう意味ですか?Android 2.3.3 でこれが発生するのはなぜですか? また、この問題を解決するにはどうすればよいですか? これにより、パーサーが破損し、アプリが強制終了されます。

4

1 に答える 1

0

解析を変更します。

XmlPullParser xpp = XmlPullParserFactory.newInstance().newPullParser();
xpp.setInput(xml, "UTF-8");

while (xpp.getEventType() != XmlPullParser.END_DOCUMENT)
{
    if (xpp.getEventType() == XmlPullParser.START_TAG)
    {
        if (xpp.getName().equalsIgnoreCase("item"))
        {
            listObject = new MyClass();
        }
        else if (xpp.getName().equalsIgnoreCase("yy"))
        {
            listObject.setYY(parser.nextText());
        }
        else if (xpp.getName().equalsIgnoreCase("zz"))
        {
            listObject.setZZ(parser.nextText());
        }
    }
    else if(xpp.getEventType() == XmlPullParser.END_TAG)
    {
        listObject = null;
    }
    xpp.next();
}
于 2012-11-24T21:21:29.250 に答える