Android XmlPullParserException异常

谷歌发布说去除了HttpClient方法今天用HTTPUrlConnection写了个解析xml文件的
程序然后出错了求各位大神们帮忙
这是我的代码
private void init() {
listView= (ListView) findViewById(R.id.list_text);
new Thread(new Runnable() {
@Override
public void run() {
getNewsInternet();
}
}).start();
}
//返回新闻信息
private List getNewsInternet(){
// //url:http://10.0.2.2:8080/NetEaseServer/new.xml
try {
URL url =new URL("http://10.0.2.2:8080/NetEaseServer/new.xml");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setConnectTimeout(1000);
conn.setReadTimeout(500);
conn.connect();
int responseCode = conn.getResponseCode();
if(responseCode==200){
InputStream is = conn.getInputStream();
List listXml =getXML(is);
Log.i(TAG,listXml.get(0).toString());
}
} catch (Exception e) {
e.printStackTrace();
}

    return  null;
}
    private List<NewInfo> getXML(InputStream is) throws XmlPullParserException, IOException {
    XmlPullParser paser = Xml.newPullParser();//xml  pull解析器
    paser.setInput(is,"UTF-8");//设置流格式
    int evenType = paser.getEventType();
    Log.i(TAG,"文件的事件"+evenType);
    List<NewInfo> newInfoList=null;
    NewInfo newInfo= null;
    while (evenType!=XmlPullParser.END_DOCUMENT){//如果没到结束就一直循环
        String tagName=paser.getName();//获得节点名称
        Log.i(TAG,"节点名称"+tagName);
        switch (evenType){
            case XmlPullParser.START_TAG:  //<news>
                if("news".equals(tagName)){
                    newInfoList= new ArrayList<NewInfo>() ;
                }else if("new".equals(tagName)){
                    newInfo = new NewInfo();
                }else if("title".equals(tagName)){
                     newInfo.setTitle(paser.nextText());//讲title的内容放进newinfo对象中
                    Log.i(TAG,"文件的标题"+paser.nextText());
                }else if("detail".equals(tagName)){
                     newInfo.setDetail(paser.nextText());//讲detaile的内容放进去
                }else if("comment".equals(tagName)){
                     newInfo.setComment(Integer.parseInt(paser.nextText()));//《commet》
                }else if("image".equals(tagName)){
                    newInfo.setImageUrl(paser.nextText());//《图片》
                }
                break;
            case XmlPullParser.END_TAG:
                if("news".equals(tagName)){
                    newInfoList.add(newInfo);
                }
                break;
            default:
                break;
        }
        evenType=paser.next();//取下一个时间的类型

    }
    return newInfoList;
}
    Logcat的信息
    -12865/? I/MainActivity﹕ 文件的事件0

10-17 12:56:10.387 12852-12865/? I/MainActivity﹕ 节点名称null
10-17 12:56:10.427 12852-12865/? I/MainActivity﹕ 节点名称news
10-17 12:56:10.457 12852-12865/? I/MainActivity﹕ 节点名称null
10-17 12:56:10.467 12852-12865/? I/MainActivity﹕ 节点名称new
10-17 12:56:10.497 12852-12865/? I/MainActivity﹕ 节点名称null
10-17 12:56:10.497 12852-12865/? I/MainActivity﹕ 节点名称title
10-17 12:56:10.577 12852-12865/? W/System.err﹕ org.xmlpull.v1.XmlPullParserException: precondition: START_TAG (position:END_TAG @4:34 in java.io.InputStreamReader@4173a850)
10-17 12:56:10.607 12852-12865/? W/System.err﹕ at org.kxml2.io.KXmlParser.nextText(KXmlParser.java:2053)
10-17 12:56:10.637 12852-12865/? W/System.err﹕ at activity.cn.com.wangyinews3.MainActivity.getXML(MainActivity.java:100)
10-17 12:56:10.637 12852-12865/? W/System.err﹕ at activity.cn.com.wangyinews3.MainActivity.getNewsInternet(MainActivity.java:58)
10-17 12:56:10.668 12852-12865/? W/System.err﹕ at activity.cn.com.wangyinews3.MainActivity.access$000(MainActivity.java:26)
10-17 12:56:10.668 12852-12865/? W/System.err﹕ at activity.cn.com.wangyinews3.MainActivity$1.run(MainActivity.java:41)
10-17 12:56:10.697 12852-12865/? W/System.err﹕ at java.lang.Thread.run(Thread.java:841)
为何会这样的 该怎么解决呢?

求帮顶 求解决 新人没悬赏

貌似你解析时解析到的内容是空的,你那个news对象都没实例化,你的列表集合newInfoList= new ArrayList() 这样写,然后你应该在解析前生成一个NewInfo对象,在解析的时候实例化,可以参考我这个代码,请仔细阅读,看看你的问题出现在哪里:

 package com.android.service;

import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

import org.xmlpull.v1.XmlPullParser;

import android.util.Xml;

import com.android.domain.News;

public class VideoNewsService {
    /**
     * 获取最新的视频资讯
     * 
     * @return
     * @throws Exception
     */
    public static List<News> getLastNews() throws 

Exception {
        String path = 

"http://10.100.18.229:8083/Videonews//servlet/ListServ

let";
        URL url = new URL(path);
        HttpURLConnection connection = 

(HttpURLConnection) url.openConnection();
        connection.setConnectTimeout(5000);
        connection.setRequestMethod("GET");
        if (connection.getResponseCode() == 

200) {
            InputStream inputStream = 

connection.getInputStream();
            return parseXML(inputStream);
        }
        return null;
    }

    /**
     * 解析服务器返回的xml数据
     * 
     * @param inputStream
     * @return
     */
    private static List<News> parseXML(InputStream 

inputStream) throws Exception {
        List<News> list=new ArrayList<News>();
        News news = null;
        XmlPullParser parser = 

Xml.newPullParser();// 实例化一个XmlPullParser对象
        parser.setInput(inputStream, "utf-

8");// 设置要解析的数据
        int event = parser.getEventType();// 

获得开始文档事件
        while (event != 

XmlPullParser.END_DOCUMENT) {// 只要事件不等于文档的结

束事件
            switch (event) {
            case XmlPullParser.START_TAG:
                if ("news".equals

(parser.getName())) {
                    int id = new 

Integer(parser.getAttributeValue(0));
                    news = new 

News();
                    news.setId

(id);
                } else if 

("title".equals(parser.getName())) {
                    news.setTitle

(parser.nextText());
                } else if 

("timelength".equals(parser.getName())) {


news.setTimelength(new Integer(parser.nextText()));
                }
                break;
            case XmlPullParser.END_TAG:
                if ("news".equals

(parser.getName())) {
                    list.add

(news);
                    news=null;
                }
            default:
                break;
            }
            event = parser.next();// 获得下个节点
        }
        return list;
    }
}

不好意思,我看错了,你试下这样行不行,有可能是你后面结束那个节点没解析到,如下图所示:
图片说明

你这个要做好节点的判断就行了吧!

你的xml文件中有几个news节点呢?看你的代码,如果有多个news的话,会在每个news开始节点处执行newInfoList= new ArrayList() ;那么最后只会返回最后一个news节点的信息。
正确初始化位置应该在文档开始时初始化。看你的代码基本没啥问题,跟参考链接中代码几乎一样,其实就是一很简单的XmlPUllParse的应用,对比检查下再调试看看吧。
参考:http://blog.csdn.net/caesardadi/article/details/8626097