本地提供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 解析的理解,以及鞏固子線程與主線程各自的操作範圍,解決問題的能力與方式等,都得到了較大的提升。