@程序員 你好,想跟你请教个问题:
// 更新本地数据库 private void updateTable1() { String urlStr = HttpUtil.BASE_URL + "servlet/UpdateServlet"; try { URL url = new URL(urlStr); URLConnection conn = url.openConnection(); InputStream in = conn.getInputStream(); DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document doc = builder.parse(in); NodeList nl = doc.getElementsByTagName("menu"); ContentResolver cr = getContentResolver(); Uri uri1 = Menus.CONTENT_URI; cr.delete(uri1, null, null); for (int i = 0; i < nl.getLength(); i++) { ContentValues values = new ContentValues(); // 解析XML文件获得菜单id int id = Integer.parseInt(doc.getElementsByTagName("id").item(i).getFirstChild().getNodeValue()); // 名称 String name = doc.getElementsByTagName("name").item(i).getFirstChild().getNodeValue(); // 图片路径 String pic = doc.getElementsByTagName("pic").item(i).getFirstChild().getNodeValue(); // 价格 int pri = Integer.parseInt(doc.getElementsByTagName("price").item(i).getFirstChild().getNodeValue()); // 添加到ContenValues对象 values.put("_id", id); values.put("name", name); values.put("pri", pri); values.put("pic", pic); // 插入到数据库 cr.insert(uri1, values); in.close(); } Toast.makeText(UpdateActivity.this, "执行了try", Toast.LENGTH_LONG).show();//运行程序后未显示 } catch (Exception e) { e.printStackTrace(); System.out.println("e.toString()--->>>"+e.toString()); Toast.makeText(UpdateActivity.this, "执行了catch", Toast.LENGTH_LONG).show();//运行程序后显示 } } }
运行程序打印出:
e.toString()--->>>org.xml.sax.SAXParseException: name expected (position:START_TAG <null>@3:2 in java.io.InputStreamReader@405a8878) 并且屏幕显示“执行了catch”,想请教一下,这是什么原因造成的?
獲取的數據的格式沒問題么######没有问题,服务器端和本地数据库的字段都是一样的,关键是我用的是dom解析,而打印e.toString(),确实SAX解析错误,这一点很纠结啊?另外我想减小try块,但是总会出现错误######另外碰見這種情況debug調試撒,這樣解決問題就簡單多了######
您看一下,在conn处提示有错误,请问怎样减小TRY块才不会出来这种错误啊?
剛開了個會
這種情況 解析的文件格式不對是會報這個錯誤的
。。。。。把 URLConnection conn = null ;放到上面
然後在Try 裡面 conn = url.openConnection() 就不會有問題了
######我又试try/catch了几个语句,最后发现是doc = builder.parse(in);这一句导致的异常org.xml.sax.SAXParseException: name expected (position:START_TAG <null>@3:2 in java.io.InputStreamReader@405a8718),您能分析出来设施什么原因导致的吗?######
剛開了個會
這種情況 解析的文件格式不對是會報這個錯誤的
。。。。。把 URLConnection conn = null ;放到上面
然後在Try 裡面 conn = url.openConnection() 就不會有問題了
// 更新本地数据库 private void updateTable1() { 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(); doc = builder.parse(in); }catch (Exception e1) { System.out.println("e1.toString()"+e1.toString()); } try { //我逐步减小这个try块的大小,这种状态下打印出如下两种语句 nl = doc.getElementsByTagName("menu"); cr = getContentResolver(); Uri uri1 = Menus.CONTENT_URI; cr.delete(uri1, null, null); for (int i = 0; i < nl.getLength(); i++) { ContentValues values = new ContentValues(); // 解析XML文件获得菜单id int id = Integer.parseInt(doc.getElementsByTagName("id").item(i).getFirstChild().getNodeValue()); // 名称 String name = doc.getElementsByTagName("name").item(i).getFirstChild().getNodeValue(); // 图片路径 String pic = doc.getElementsByTagName("pic").item(i).getFirstChild().getNodeValue(); // 价格 int pri = Integer.parseInt(doc.getElementsByTagName("price").item(i).getFirstChild().getNodeValue()); // 添加到ContenValues对象 values.put("_id", id); values.put("name", name); values.put("pri", pri); values.put("pic", pic); // 插入到数据库 cr.insert(uri1, values); in.close(); } } catch (Exception e) { e.printStackTrace(); } } }
09-21 14:36:03.390: I/System.out(2610): e1.toString()org.xml.sax.SAXParseException: name expected (position:START_TAG <null>@3:2 in java.io.InputStreamReader@405a2f28)
09-21 14:36:03.390: I/System.out(2610): e2.toString()java.lang.NullPointerException,也就是说明执行的都是catch。
在try块从in = conn.getInputStream();位置下移到doc = builder.parse(in);
时,打印的都是I/System.out(2506): e2.toString()org.xml.sax.SAXParseException: name expected (position:START_TAG <null>@3:2 in java.io.InputStreamReader@405a8558)
这能说明什么问题吗?从这里可以分析出来是什么原因吗?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。