XMLPullParser 抛出预期错误:开始标记

XMLPullParser throws Error Expected: Start Tag

我正在为 Android 构建一个 RSS Reader,但我不知道我做错了什么。 我使用了这个教程:http://developer.android.com/training/basics/network-ops/xml.html

我总是得到一个错误:

/RSSXMLHELPER:: Error: org.xmlpull.v1.XmlPullParserException: expected: START_TAG {null}rss (position:START_DOCUMENT null@1:1 in java.io.InputStreamReader@12c8977c)

这是我的 XMLPullParser class:

public class RSSXMLHelper {

PostData postData;
ArrayList<PostData> pList;

public ArrayList<PostData> parse(InputStream in) throws XmlPullParserException, IOException {
        if (in != null) {
            try {
                XmlPullParser parser = Xml.newPullParser();

                parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false);

                parser.setInput(in, null);

                parser.nextTag();

                return readRss(parser);
            } finally {
                if (in != null) {
                    in.close();
                }
            }
        } else {
            postData = new PostData();

            pList = new ArrayList<>();
            //l.add(entry);
            return pList;

        }
}

private ArrayList<PostData> readRss(XmlPullParser parser)
        throws XmlPullParserException, IOException {
    ArrayList<PostData> items = new ArrayList<>();
    parser.require(XmlPullParser.START_TAG, null, "rss");
    while (parser.next() != XmlPullParser.END_TAG) {
        if (parser.getEventType() != XmlPullParser.START_TAG) {
            continue;
        }
        String name = parser.getName();
        if (name.equals("channel")) {
            items.addAll(readChannel(parser));
        } else {
            skip(parser);
        }
    }
    return items;
}

private ArrayList<PostData> readChannel(XmlPullParser parser)
        throws IOException, XmlPullParserException {
    ArrayList<PostData> items = new ArrayList<>();
    parser.require(XmlPullParser.START_TAG, null, "channel");
    while (parser.next() != XmlPullParser.END_TAG) {
        if (parser.getEventType() != XmlPullParser.START_TAG) {
            continue;
        }
        String name = parser.getName();
        if (name.equals("item")) {
            items.add(readItem(parser));
        } else {
            skip(parser);
        }
    }
    return items;
}

private PostData readItem(XmlPullParser parser) throws XmlPullParserException, IOException {
    PostData postData = new PostData();
    parser.require(XmlPullParser.START_TAG, null, "item");
    while (parser.next() != XmlPullParser.END_TAG) {
        if (parser.getEventType() != XmlPullParser.START_TAG) {
            continue;
        }
        String name = parser.getName();
        if (name.equals("title")) {
            postData.setPostTitle(readTitle(parser));
        } else {
            skip(parser);
        }
    }
    return postData;
}

private String readTitle(XmlPullParser parser)
        throws IOException, XmlPullParserException {
    parser.require(XmlPullParser.START_TAG, null, "title");
    String title = readText(parser);
    parser.require(XmlPullParser.END_TAG, null, "title");
    return title;
}

private String readText(XmlPullParser parser)
        throws IOException, XmlPullParserException {
    String result = "";
    if (parser.next() == XmlPullParser.TEXT) {
        result = parser.getText();
        parser.nextTag();
    }
    return result;
}

private void skip(XmlPullParser parser) throws XmlPullParserException, IOException {
    if (parser.getEventType() != XmlPullParser.START_TAG) {
        throw new IllegalStateException();
    }
    int depth = 1;
    while (depth != 0) {
        switch (parser.next()) {
            case XmlPullParser.END_TAG:
                depth--;
                break;
            case XmlPullParser.START_TAG:
                depth++;
                break;
        }
    }
}

}

我找了2个小时的错误,但我真的不知道我的代码有什么问题....

编辑:

XML 文件:ifrick.ch/feed

我明白了。密码正确。

问题是我正在写一个新的 Class 并将其放在现有的 class 后面进行测试。当涉及到新的 XMLReader Class...

时,Inputstream 已经关闭