XmlPullParser对象不会读取我的第二个标记

时间:2014-03-15 00:56:30

标签: java android

xmlpullparser没有读取我的第二个标记term。它总是迭代两次:第一次,内部标记被正确识别为appname,但第二次,它是null

public static List<Term> readConfig(XmlPullParser parser)
        throws XmlPullParserException, IOException
{

    List<Term> terms = null;

    parser.require(XmlPullParser.START_TAG, ns, "app");

    while (parser.next() != XmlPullParser.END_TAG)
    {
        if (parser.getEventType() != XmlPullParser.START_TAG)
        {
            continue;
        }

        String innerTag = parser.getName();

        if (innerTag.equals("appname"))
        {
            Logger.log("2");
        }
        else if (innerTag.equals("term"))
        {
            // terms = readTerm(parser);
            Logger.log("1");
        }

    }

    return terms;
}

我的xml文件

<?xml version="1.0" encoding="UTF-8"?>
<app>
<appname>abdalla</appname>
<term>term1</term>
</app>

例外

Caused by: java.lang.NullPointerException: asset
at android.content.res.AssetManager.getAssetRemainingLength(Native Method)
at android.content.res.AssetManager.access$300(AssetManager.java:36)
at android.content.res.AssetManager$AssetInputStream.available(AssetManager.java:555)
at java.io.InputStreamReader.read(InputStreamReader.java:234)
at org.kxml2.io.KXmlParser.fillBuffer(KXmlParser.java:1496)
at org.kxml2.io.KXmlParser.readValue(KXmlParser.java:1340)
at org.kxml2.io.KXmlParser.next(KXmlParser.java:390)
at org.kxml2.io.KXmlParser.next(KXmlParser.java:310)
at model.XMLParser.readConfig(XMLParser.java:55)
at com.example.xmlparser.MainActivity.onCreate(MainActivity.java:47)
at android.app.Activity.performCreate(Activity.java:5133)

1 个答案:

答案 0 :(得分:0)

我找到答案我用

修复了上面的代码
    else if (eventType == XmlPullParser.END_TAG && tagName.equals(APP))
    {
        break;
    }

完整的代码

public static List<Term> readConfig(XmlPullParser parser)
        throws XmlPullParserException, IOException
{

    List<Term> terms = new ArrayList<Term>();

    parser.require(XmlPullParser.START_TAG, ns, APP);

    int eventType = parser.getEventType();
    while (eventType != XmlPullParser.END_DOCUMENT)
    {
        String tagName = parser.getName();

        if (eventType == XmlPullParser.START_TAG && tagName.equals(APP))
        {
            // Attrubites
            String name = parser.getAttributeValue(null, "name");
            Logger.log(name);
        }
        else if (tagName != null && tagName.equals(TERM))
        {
            terms.add(readTerm(parser));
        }
        else if (eventType == XmlPullParser.END_TAG && tagName.equals(APP))
        {
            break;
        }
        eventType = parser.next();

    }

    return terms;
}