@程序員 你好,想跟你请教个问题:
// 更新本地数据库
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)
这能说明什么问题吗?从这里可以分析出来是什么原因吗?