程序源代码:
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 手机端与服务器端数据传递的各种形式,你是怎么学习的啊?有没有好书推荐?