本地提供XML数据,使用 MyEclipse ,项目地址
Android端获取并解析成List集合显示,用Android Studio,项目地址
该项目在完成的过程中,所遇到的问题:
1、jstl 的 taglib 中的 uri 的设置:(需要到jar包,项目中已经导入)
以前在学Java Web 时有学到过,请按照以下路径找到对应的 url 地址(这个地址不支持EL表达式,下面告知支持EL表示的URL地址)。
图:jstl url路径
支持EL表达式的地址:http://java.sun.com/jstl/core_rt(当然方法不只这一种)
2、MyEclipse 中更改了 ListServlet.java 的包名,导致服务器启动后总是空白,无任何信息。
其实这里,右键更改了包名后,配置文件里并不会自动改变,需要在web.xml中检查配置的servlet-class是否正确,在这里卡得有点久,因为没有啥有价值的提示。
3、在jsp页面中,想要输出的页面为xml而不是html,需要在 page 标签中设置字段contentType="text/xml"。
4、Toast 需要写在UI线程中,这句很重要,以前做项目过程中没有过多的关注Toast,导致这次调试后才发现是Toast部分出了问题。
在网络不佳或没网的时候,请求connection.getResponseCode() 出现崩溃,后来经过调试发现,它们崩溃时报IOException,调试跟踪,我将 Toast 信息写在了 catch 部分,而网络获取是写在子线程中的。
还有另一个错误是,carch 的 Exception e,e 为空,而我接下来也调用了 e.printStackTrace(),需要对 e 的值加以判断。
5、XML 解析时调用 parser.setInput(in,“UTF-8”); 时,总是崩溃,因跟踪进去时,它是接口,没有找到有价值的信息,网络上所是编码有误,我下载了火狐插件debug跟踪,证明网页响应编码是 UTF-8。
后来通过观察日志信息,发现是因为我提前关闭了stream,查找到对应的地方,原来,是我在返回 InputStream 前已经调用了 connection.disconnect() 关闭了连接。
另加一句:获取xml 的地址,必须是局域网的ip地址,不能是 localhost,如用 cmd 输入 ipcpnfig,就可以得到对应的局域网 ip,我的 ip 是 192.168.1.24,你的机器可能会不一样。
通过这个项目,使我加深了对 xml pull 解析的理解,以及巩固子线程与主线程各自的操作范围,解决问题的能力与方式等,都得到了较大的提升。