程序源代码:
private void updateMenu(){ String urlStr = HttpUtil.BASE_URL + "servelet/UpdataServelet"; HttpURLConnection 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 = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("GET"); conn.connect(); }catch (Exception e1) { System.out.println("e1.toString()"+e1.toString()); } try { in = conn.getInputStream(); }catch (Exception e2) { System.out.println("e2.toString()"+e2.toString()); } try { factory = DocumentBuilderFactory.newInstance(); builder = factory.newDocumentBuilder(); doc = builder.parse(in); nl = doc.getElementsByTagName("menu"); cr = getContentResolver(); uri1 = Uri.parse ("content://com.wang.domtest02.myprovider/menu1"); cr.delete(uri1, null, null); // 循环将数据保存到菜谱表 for (int i = 0; i < nl.getLength(); i++) { ContentValues values = new ContentValues(); int id = Integer.parseInt(doc.getElementsByTagName("id").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); in.close(); } }catch (Exception e3) { System.out.println("e3.toString()"+e3.toString()); } }
异常如下:
10-16 17:09:50.155: I/System.out(22977): e2.toString()java.io.FileNotFoundException: http://111.186.100.77:8080/Wireless_Serverservelet/UpdataServelet
10-16 17:09:50.155: I/System.out(22977): e3.toString()java.lang.IllegalArgumentException: InputStream cannot be null
谁能帮我看看问题出在哪?为什么会报这样的异常,我的服务器端TOMCAT和数据库已经绑定在一起,数据库里是有数据的。到底是什么原因呢?
那地址是:http://111.186.100.77:8080/Wireless_Server/servelet/Updateservelet
不过http://111.186.100.77:8080
你这个像是外网地址,你确定正确能访问?
我把从网络读取的数据流转化字符串,用的方法是:
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,但是解析的时候出来问题。
接着我在本地的assets文件夹里写了一个xml文件:
<?xml version="1.0" encoding="utf-8"?> <menulist> <menu> <id>1</id> <name>张三</name> </menu> <menu> <id>2</id> <name>李四</name> </menu> <menu> <id>3</id> <name>王五</name> </menu> <menu> <id>4</id> <name>高小小</name> </menu> <menu> <id>5</id> <name>李大大</name> </menu> <menu> <id>6</id> <name>郭剩剩</name> </menu> </menulist>
用同样的解析方法,可以解析出来,并且保存到SQLite数据表中。
这样看来是不是因为网络读取的xml文件格式有问题,所以导致的解析错误呢?
因为网络的xml是根据服务器的数据库文件自动生成的,所以到底该怎么弄呢?我没思路了又
String urlStr = HttpUtil.BASE_URL + "servelet/UpdataServelet";
和
比起来,是不是多了个“servelet/”???
######我定义的 BASE_URL 是:public static final String BASE_URL = "http://111.186.100.77:8080/Wireless_Server",然后加上后边的servelet/Updateservelet######http://111.186.100.77:8080/Wireless_Server/Updateservelet
是你想访问的地址还是
http://111.186.100.77:8080/Wireless_Server/servelet/Updateservelet
http://111.186.100.77:8080/Wireless_Server/Updateservelet
是你想访问的地址还是
http://111.186.100.77:8080/Wireless_Server/servelet/Updateservelet
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <servlet> <servlet-name>LoginServlet</servlet-name> <servlet-class>com.wang.servlet.LoginServlet</servlet-class> </servlet> <servlet> <servlet-name>PayMoneyServlet</servlet-name> <servlet-class>com.wang.servlet.PayMoneyServlet</servlet-class> </servlet> <servlet> <servlet-name>PayServlet</servlet-name> <servlet-class>com.wang.servlet.PayServlet</servlet-class> </servlet> <servlet> <servlet-name>UpdateServlet</servlet-name> <servlet-class>com.wang.servlet.UpdateServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>LoginServlet</servlet-name> <url-pattern>/servlet/LoginServlet</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>PayMoneyServlet</servlet-name> <url-pattern>/servlet/PayMoneyServlet</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>PayServlet</servlet-name> <url-pattern>/servlet/PayServlet</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>UpdateServlet</servlet-name> <url-pattern>/servlet/UpdateServlet</url-pattern> </servlet-mapping> <filter> <filter-name>EF</filter-name> <filter-class>com.wang.filter.EncodingFilter</filter-class> </filter> <filter-mapping> <filter-name>EF</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>web.xml是这样的,昨天整程序整的晕得连汉语意思都看不懂了,你看看我这里边UpdateServlet
那地址是:http://111.186.100.77:8080/Wireless_Server/servelet/Updateservelet
不过http://111.186.100.77:8080
你这个像是外网地址,你确定正确能访问?
######回复 @hanzhankang : 今天我换了一个思路,现在本地文件夹assets中写了一个xml,然后解析这个,程序是可以正常运行的,这就证明解析方法没错。那怎样看一下是不是读取过来数据 呢?######回复 @skywxx : 既然获取了数据,你就好好解析结果,dom,sax都无所谓的,网上也有代码,很好找的!xml,json数据格式最好都尝试一下,这些都是很实用的!######回复 @hanzhankang : 我try/catch异常,现在报了这个异常,好像是SAX解析的异常,但是我用的是DOM解析啊,这是什么原因呢?org.xml.sax.SAXParseException: name expected (position:START_TAG <null>@3:2 in java.io.InputStreamReader@411cce48)######回复 @skywxx : 我想你做了这个例子就知道原理是什么了,你的方法已经很好了,其他的方法也是对原始方法的封装!######关于android 手机端与服务器端数据传递的各种形式,你是怎么学习的啊?有没有好书推荐?版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。