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接続はメソッド内で1回だけ呼び出されます)、最初のXMLファイルの26の「ユニット」を実行します-それをXML1と呼び、次に25のXML2を繰り返します「Places」は、IDフィールドがXML1と一致するまで、XML2の他のいくつかのフィールドを取得して配列リストに格納し、「Peopel」を使用してXML3に対して同じことを行います。完了すると、先頭に戻り、リスト内の次のIDから再開します。

さて、私の問題は、このプロセスにかかる時間は理想的には数秒未満である必要があるということです。これには20秒かかります。記録のために、これはLGNexus4の20Mbitを介してWifi経由です。MotoralDefyとGalaxyAce2を介して複製できます。なぜこれほど遅いのか誰か知っていますか?

私はJava/Androidを初めて使用するので、何か間違ったコードを記述したのか、それともXMLの解析が遅いのかわかりません。

4

1 に答える 1

0

コードがXMLをDOMに解析してから、DOMを1回トラバースして、必要なデータを抽出しているようです。解析されたアイテムがアプリケーションに渡されるときに、SAXパーサーを使用してデータをオンザフライで抽出することを検討する必要があります。

于 2013-03-19T20:27:35.807 に答える