android手机端读取服务器端数据。服务器端已xml的形式发送的数据,手机端用DOM解析xml的方法,读取数据并保存到SQLite中,源代码如下:
- Java code
private void update() { String urlStr = HttpUtil.BASE_URL + "servlet/UpdateServlet"; URLConnection conn = null ; InputStream in = null; DocumentBuilderFactory factory = null; DocumentBuilder builder = null; Document doc = null; Uri uri1 = null; ContentResolver cr = null; NodeList nl = null; try { URL url = new URL(urlStr); conn = url.openConnection(); in = conn.getInputStream(); factory = DocumentBuilderFactory.newInstance(); builder = factory.newDocumentBuilder(); }catch (Exception e1) { System.out.println("e1.toString()---->>>>"+e1.toString()); } try { doc = builder.parse(in); }catch (Exception e2) { System.out.println("e2.toString()----->>>>"+e2.toString()); } try { nl = doc.getElementsByTagName("menu"); cr = getContentResolver(); uri1 = Menus.CONTENT_URI; cr.delete(uri1, null, null); // 循环将数据保存到SQLite for (int i = 0; i < nl.getLength(); i++) { ContentValues values = new ContentValues(); int id = Integer.parseInt(doc.getElementsByTagName("id").item(i).getFirstChild().getNodeValue()); item(i).getFirstChild().getNodeValue()); String name = doc.getElementsByTagName("name").item(i).getFirstChild().getNodeValue(); // 添加到ContenValues对象 values.put("_id", id); values.put("name", name); cr.insert(uri1, values); } }catch (Exception e3) { System.out.println("e3.toString()---->>>"+e3.toString()); }}
捕获到异常:
10-19 08:51:29.405: I/System.out(18908): e2.toString()----->>>>org.xml.sax.SAXParseException: name expected (position:START_TAG <null>@3:2 in [email protected])
10-19 08:51:29.405: I/System.out(18908): e3.toString()---->>>java.lang.NullPointerException
第一个问题:看异常,貌似是SAX解析XML文件出的异常,但是我用的是DOM解析啊。第二个问题:第一个try/catch块未捕获到异常,是不是代表正确读取到了输入流?
------解决方案--------------------
xml解析出错,调试
- Java code
try {} catch (SAXParseException e) { e.printStackTrace();}
------解决方案--------------------
不成功,解析错误,守先我会怀疑过来的数据是不是真正意义xml输出看一下
调用解析方法是否正确,而不是直接看结果
你看下这个例子吧,和你的差不多
http://blog.csdn.net/wong_judy/article/details/5854888
------解决方案--------------------
建议:你可以将远程的文件读写到本地,然后在本地解析,由此来判定后台返回的是不是正确的xml格式。
------解决方案--------------------
应该是服务器传过来的数据不符合你的解析规范吧。
直接从获得的InputStream里读取数据然后打印出来,看看是否正确。