做安卓项目的时候用Pull解析xml,报如下错误:
W/System.err(3384): Premature end of document. (position:line -1, column -1) caused by: org.apache.harmony.xml.ExpatParser$ParseException: At line 1, column 0: no element found; nested exception is:
多次尝试发现是解析输入流的时候出现异常,将输入流重新包装到一个字节输出流中,最终在以输入流的形式提供给pull解析器解析。代码如下:
private static void parseXML(InputStream xml) throws Exception{ ByteArrayOutputStream outStream = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int len = 0; while( (len = xml.read(buffer)) != -1){ outStream.write(buffer, 0, len); } outStream.close(); XmlPullParser pullParser = Xml. newPullParser(); // pullParser.setInput( xml, "UTF-8");//直接将输入流写入即会报错 pullParser.setInput( new ByteArrayInputStream(new String(outStream.toByteArray()).getBytes()), "UTF-8" ); //do some work... }
经过如上代码的装箱拆箱操作,这个异常已经解决了。其实完全可以将流的操作提取到一个工具类里面,方面其它地方也能调用。XMLPull在线解析XML异常处理 这篇文章里就有提供类似的方法,有兴趣的可以研究一下。