android应用中使用xmlpull解析xml文档失败

本人刚入门android

在看黎活明老师的android视频做一资讯客户端案例,使用android应用从web应用程序中获取xml数据再进解析成资讯实体,基本上按照视频上的操作可是我的应用就是失败了。

下面是我的业务代码

public class VideoNewsService {
	
	/**
	 * 获取最新视频资讯
	 * @return
	 * @throws IOException
	 * @throws XmlPullParserException 
	 */
	public  static  List<News>  getLastNews() throws IOException, XmlPullParserException {
		String  path = "http://10.0.2.2:8080/news/ListServlet";
		URL  url = new  URL(path);
		HttpURLConnection  conn = (HttpURLConnection) url.openConnection();
		conn.setReadTimeout(5000);
		conn.setRequestMethod("GET");
		if(conn.getResponseCode()==200) {
			InputStream  is = conn.getInputStream();
			return  parseXML(is);
		}
		return  null;
	}

	/**
	 * 解析服务器返回的XML数据
	 * @return
	 * @throws XmlPullParserException 
	 * @throws IOException 
	 */
	private    List<News> parseXML(InputStream  is) throws XmlPullParserException, IOException {
		List<News>  newsList = new  ArrayList<News>();
		XmlPullParser  parser = Xml.newPullParser();
		parser.setInput(is, "UTF-8");
		int  type = parser.getEventType();
		News  news = null;
		while(type!=XmlPullParser.END_DOCUMENT) {
			switch (type) {
			case XmlPullParser.START_TAG:
				if("news".equals(parser.getName())) {
					news = new News();
					Integer  id = Integer.valueOf(parser.getAttributeValue(0));
					news.setId(id);
				}  else  if("name".equals(parser.getName())) {
					String  name = parser.nextText();
					news.setName(name);
				}  else  if("timeLength".equals(parser.getName())) {
					Integer  timeLength = Integer.valueOf(parser.nextText());
					news.setTimeLength(timeLength);
				}
				break;
			case  XmlPullParser.END_TAG:
				if("news".equals(parser.getName())) {
					newsList.add(news);
					news = null;
				}
				break;
			default:
				break;
			}
			type = parser.next();
		}
		return  newsList;
	}
}


        运行的时候解析失败,一开始以为是我的解析代码写错了,经仔细核对并无误,看LogCat打印出的错误信息也没看出什么端倪,只知道是解析XML数据出错了,但为了进一步确认还是做了一实验,用从web应用返回的XML数据构建了一字符串用Log进行记录,从LogCat中看到了正确的数据,这次确信无疑是XML解析出了问题。

       于是去检验parseXML方法,自己写了一XML文件用该方法进行单元测试,竟然解析成功了,这我就纳闷了,为什么从web应用返回的XMl数据无误,解析方法也没问题,两个一组在一起就出问题了呢,后来再回增看打印出的错误信息,其中有一句:XML or text declaration not at start of entity,这使我想到XML文件的文档声明,由于要引入JSTL所以我的文档声明没有放在第一行,后来把文档声明放到第一行再运行android应用,运行成功了,这下终于搞明白了,对于xmlpull解析器文档声明一定要放在第一行的位置,否则解析就会出错。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值