1

我的 android 应用程序中的解析存在一些实际问题。我正在使用 DOM 样式解析器提取一些 XML 文件,它需要将近 20 秒的时间来完成并在它们上运行一些代码,这些文件不超过 30KB。

这是从该方法中获取的一些代码:

代码如下:

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 连接仅在方法中调用一次),它在第一个 XML 文件中运行 26 个“单元”——我们称之为 XML1,然后迭代第二个,XML2 和 25' Places',直到 ID 字段与 XML1 匹配,然后抓取 XML2 的一些其他字段并将它们存储到 arraylist 中,然后对带有 'Peopel' 的 XML3 执行相同的操作。完成后,它会返回顶部并从列表中的下一个 ID 重新开始。

现在,我的问题是,理想情况下,这个过程需要不到几秒钟,它需要 20 秒!根据记录,这是通过 LG Nexus 4 上的 20Mbit 的 Wifi。可以通过 Motoral Defy 和 Galaxy Ace 2 复制。有谁知道它为什么这么慢?

我是 Java/Android 的新手,所以我不知道我是否编码错误,或者 XML 解析速度很慢?

4

1 回答 1

0

看来您的代码正在将 XML 解析为 DOM,然后遍历 DOM 一次以提取您需要的数据。您应该考虑使用 SAX 解析器并在将解析的项目传递给您的应用程序时即时提取数据。

于 2013-03-19T20:27:35.807 回答