Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/219.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android中的XmlPullParser_Android_Xmlpullparser - Fatal编程技术网

Android中的XmlPullParser

Android中的XmlPullParser,android,xmlpullparser,Android,Xmlpullparser,我想从中解析xml,但我得到的结果如下: “新移民 最后更新:5月28日下午6:45“ 我没有足够的声誉,所以我只能发表文字而不是图片。请原谅 我是Android的新手,所以我从网站上复制了代码并做了一些修改来解析上面的xml数据。我读了别人的问题,认为问题出在“频道”标签上,但经过一些修改后,一切都没有改变。以下是核心代码: private List<Entry> readFeed(XmlPullParser parser) throws XmlPullParserExceptio

我想从中解析xml,但我得到的结果如下:

“新移民

最后更新:5月28日下午6:45“

我没有足够的声誉,所以我只能发表文字而不是图片。请原谅

我是Android的新手,所以我从网站上复制了代码并做了一些修改来解析上面的xml数据。我读了别人的问题,认为问题出在“频道”标签上,但经过一些修改后,一切都没有改变。以下是核心代码:

private List<Entry> readFeed(XmlPullParser parser) throws XmlPullParserException, IOException {
    List<Entry> entries = new ArrayList<Entry>();

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

    parser.next();//I add this statement to pass the channel tag but it doesn't work

    while (parser.next() != XmlPullParser.END_TAG) {
        String name = parser.getName();
       if (parser.getEventType() != XmlPullParser.START_TAG) {
            continue;
        }
        // Starts by looking for the entry tag
        if (name.equals("item")) {
            entries.add(readEntry(parser));
        } else {
            skip(parser);
        }
    }
    return entries;
}

private Entry readEntry(XmlPullParser parser) throws XmlPullParserException, IOException {

    parser.require(XmlPullParser.START_TAG, ns, "item");
    String title = null;
    String description = null;
    String link = null;
    while (parser.next() != XmlPullParser.END_TAG) {
        if (parser.getEventType() != XmlPullParser.START_TAG) {
            continue;
        }
        String name = parser.getName();
        if (name.equals("title")) {
            title = readTitle(parser);
        } else if (name.equals("description")) {
            description = readDescription(parser);
        } else if (name.equals("link")) {
            link = readLink(parser);
        } else {
            skip(parser);
        }
    }
    return new Entry(title, description, link);
}
private List readFeed(XmlPullParser解析器)抛出XmlPullParserException,IOException{
列表项=新的ArrayList();
require(XmlPullParser.START_标记,ns,“rss”);
parser.next();//我添加此语句以传递通道标记,但它不起作用
while(parser.next()!=XmlPullParser.END_标记){
String name=parser.getName();
if(parser.getEventType()!=XmlPullParser.START_标记){
继续;
}
//首先查找条目标记
如果(名称等于(“项目”)){
add(readEntry(解析器));
}否则{
跳过(解析器);
}
}
返回条目;
}
私有条目readEntry(XmlPullParser解析器)抛出XmlPullParserException,IOException{
require(XmlPullParser.START_标记,ns,“item”);
字符串标题=null;
字符串描述=null;
字符串链接=null;
while(parser.next()!=XmlPullParser.END_标记){
if(parser.getEventType()!=XmlPullParser.START_标记){
继续;
}
String name=parser.getName();
如果(名称等于(“头衔”)){
title=readTitle(解析器);
}else if(name.equals(“description”)){
description=readDescription(解析器);
}else if(name.equals(“link”)){
link=readLink(解析器);
}否则{
跳过(解析器);
}
}
返回新条目(标题、说明、链接);
}

如果有人能帮忙,我将不胜感激。

问题在于方法
readFeed
,应该是:

private List<Item> readFeed(XmlPullParser parser) throws IOException, XmlPullParserException {
    List<Item> items = new ArrayList();
    parser.require(XmlPullParser.START_TAG, null, "rss"); // first start tag begin with <rss>
    parser.nextTag();
    parser.require(XmlPullParser.START_TAG, null, "channel");// second is <channel>
    while (parser.next() != XmlPullParser.END_TAG) { // if encounter </channel>, stop
        if (parser.getEventType() != XmlPullParser.START_TAG) {
            continue;
        }
        String name = parser.getName();
        Log.d(TAG, "start tag: " + name);
        // Starts by looking for the item tag
        if (name.equals("item")) {
            items.add(readItem(parser));
        } else {
            skipTag(parser);
        }
    }
    return items;
}
private List readFeed(XmlPullParser解析器)抛出IOException、XmlPullParserException{
列表项=新建ArrayList();
require(XmlPullParser.START_标记,null,“rss”);//第一个开始标记以开头
parser.nextTag();
require(XmlPullParser.START_标记,null,“channel”);//第二个是
while(parser.next()!=XmlPullParser.END_标记){//如果遇到,请停止
if(parser.getEventType()!=XmlPullParser.START_标记){
继续;
}
String name=parser.getName();
Log.d(标签,“开始标签:”+名称);
//首先查找项目标记
如果(名称等于(“项目”)){
add(readItem(解析器));
}否则{
skipTag(解析器);
}
}
退货项目;
}

尝试将解析器初始化中的“rss”更改为“channel”:parser.require(XmlPullParser.START_标记,ns,“channel”);我做了,但这次什么也没出现。谢谢你的帮助。你试过调试吗?对不起,我弄错了,“新来的”是我自己发的,不是解析的结果。所以现在实际上我什么也得不到。我想我最好仔细阅读android.com上的教程。我在这里找到了答案: