android手机端读取服务器端数据。服务器端已xml的形式发送的数据,手机端用DOM解析xml的方法,读取数据并保存到SQLite中,源代码如下:
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 java.io.InputStreamReader@411cce48)
10-19 08:51:29.405: I/System.out(18908): e3.toString()---->>>java.lang.NullPointerException第一个问题:看异常,貌似是SAX解析XML文件出的异常,但是我用的是DOM解析啊。第二个问题:第一个try/catch块未捕获到异常,是不是代表正确读取到了输入流?
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 java.io.InputStreamReader@411cce48)
10-19 08:51:29.405: I/System.out(18908): e3.toString()---->>>java.lang.NullPointerException第一个问题:看异常,貌似是SAX解析XML文件出的异常,但是我用的是DOM解析啊。第二个问题:第一个try/catch块未捕获到异常,是不是代表正确读取到了输入流?
解决方案 »
- 菜鸟问题,ArrayList无法赋值
- 帮忙看看这个到底是咋回事
- 查询一个表,怎样做能让结果按拼音来排序
- 求助,Widget 显示不了
- 如何在主类中添加外部定义的view——小白,期待高手解答,进来聊聊经验也感激不尽啊——————-——————
- Android开发
- andriod map的listener 问题
- 急,关于联系人删除无法删除问题。
- sqlite查询,datetime问题
- 在android系统环境下编译jni,没有报错,但是生成的so中增加的接口和代码无效
- 用setImageResource方法动态设置ImageView的图片形成动画效果,可行吗?
- 在ImageView中方法setBackgroundColor()为什么不起作用?
} catch (SAXParseException e) {
e.printStackTrace();
}第二个问题是空指针了
你双击看跳到哪一行
另外for (int i = 0; i < nl.getLength()-1; i++) 会不会是越界了呢
调用解析方法是否正确,而不是直接看结果
你看下这个例子吧,和你的差不多
http://blog.csdn.net/wong_judy/article/details/5854888
我在本地的文件夹assets里写了一个xml,然后解析这个xml就可以征程运行。怎样输出过来的xml呢?
直接从获得的InputStream里读取数据然后打印出来,看看是否正确。
远程文件怎样保存到本地啊?或者怎样从输入流读取打印出来数据,以验证读过来的是不是xml文件,求帮助,谢谢您啦!!
从网络读取的数据流,我用int b;
StringBuffer sb = new StringBuffer();
while((b = in.read())!=-1 ){
sb.append((char)b);
}
System.out.println(sb);转化为字符串然后打印出来:10-20 10:47:26.079: I/System.out(32577): <?xml version="1.0" encoding="utf-8"?>
10-20 10:47:26.079: I/System.out(995): <menulist>
10-20 10:47:26.079: I/System.out(995): <>
10-20 10:47:26.079: I/System.out(995): <menu>
10-20 10:47:26.089: I/System.out(995): <id>1</id>
10-20 10:47:26.089: I/System.out(995): <name>宫ä¿é¸¡ä¸</name>
10-20 10:47:26.089: I/System.out(995): </menu>
10-20 10:47:26.089: I/System.out(995): <menu>
10-20 10:47:26.089: I/System.out(995): <id>2</id>
10-20 10:47:26.089: I/System.out(995): <name>é¦è¾£åè±ä¸</name>
10-20 10:47:26.089: I/System.out(995): </menu>
10-20 10:47:26.089: I/System.out(995): <menu>
10-20 10:47:26.089: I/System.out(995): <id>3</id>
10-20 10:47:26.089: I/System.out(995): <name>çè¾ä»</name>
10-20 10:47:26.089: I/System.out(995): </menu>
10-20 10:47:26.089: I/System.out(995): <menu>
10-20 10:47:26.089: I/System.out(995): <id>4</id>
10-20 10:47:26.089: I/System.out(995): <name>åæ¤éé¾é±¼</name>
10-20 10:47:26.099: I/System.out(995): </menu>
10-20 10:47:26.099: I/System.out(995): <menu>
10-20 10:47:26.099: I/System.out(995): <id>5</id>
10-20 10:47:26.099: I/System.out(995): <name>红ç§è</name>
10-20 10:47:26.099: I/System.out(995): </menu>
10-20 10:47:26.099: I/System.out(995): <menu>
10-20 10:47:26.099: I/System.out(995): <id>6</id>
10-20 10:47:26.099: I/System.out(995): <name>æé³ä¸åè</name>
10-20 10:47:26.099: I/System.out(995): </menu>
10-20 10:47:26.099: I/System.out(995): </menulist>这样是不是说明读取到了xml文件,但是可能格式不对,所以没法解析?
打印出来的乱码是中文。既然格式是对的,我的DOM解析方法也是对的,为什么解析不了呢?