我在解析我的android應用程序時遇到了一些實際問題。我使用DOM樣式解析器拉下了一些XML文件,它需要將近20秒才能完成,並在其上運行一些代碼,這些文件不超過30KB。Android w3c DOM解析很慢
這是從該方法的一些代碼:
代碼如下:
HttpURLConnection vehicles_conn = (HttpURLConnection) new URL("XXXXXXX").openConnection();
vehicles_conn.setRequestMethod("POST");
vehicles_conn.setDoInput(true);
vehicles_conn.setDoOutput(true);
vehicles_conn.setRequestProperty("Content-type", "application/x-www-form-urlencoded");
vehicles_conn.setChunkedStreamingMode(0);
String vehicles = URLEncoder.encode("LogonToken", "UTF-8") + "=" + URLEncoder.encode(gettoken, "UTF-8");
OutputStream vehicles_os = vehicles_conn.getOutputStream();
Writer vehicles_wr = new OutputStreamWriter(vehicles_os);
vehicles_wr.write(vehicles);
vehicles_wr.flush();
InputStream vehicles_is = vehicles_conn.getInputStream();
vehicles_wr.close();
DocumentBuilderFactory vehicles_dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder vehicles_dBuilder = vehicles_dbFactory.newDocumentBuilder();
Document vehicles_doc = vehicles_dBuilder.parse(vehicles_is);
NodeList vehicles_nList = vehicles_doc.getElementsByTagName("UNIT");
for (int temp = 0; temp < vehicles_nList.getLength(); temp++) {
//Create a new vehicle object
Vehicle v = new Vehicle();
Node vehicles_nNode = vehicles_nList.item(vehicles_temp);
if (vehicles_nNode.getNodeType() == Node.ELEMENT_NODE) {
Element vehicles_eElement = (Element) vehicles_nNode;
String something = (getTagValue("ID", vehicles_eElement));
.........
現在,我的這些3(http連接僅稱爲ONCE然而,該方法內),它通過第一個XML文件中的26個「單位」運行 - 我們稱之爲XML1,然後遍歷第二個具有25個「位置」的XML2,直到ID字段與XML1匹配,然後抓取XML2的其他字段並存儲它們進入一個數組列表,然後用'Peopel'對XML3進行同樣的操作。一旦完成,它將回到最高層,並再次使用列表中的下一個ID開始。
現在,我的問題是,這個過程需要花費少於幾秒鐘的時間,理想情況下,這需要20!對於記錄來說,這是通過LG Nexus 4上的20Mbit Wifi實現的。可以通過Motoral Defy和Galaxy Ace 2進行復制。有誰知道爲什麼它如此之慢?
我是Java/Android的新手,所以我不知道我是否編寫了錯誤的代碼,或者XML解析速度慢?
你喜歡vtd-xml解析器嗎? – 2016-04-06 21:20:55