1

我正在尝试从服务器下载 XML 文件,并使用 XMLpull 解析器来处理它,但它不会每次都下载整个数据。即使我尝试等待下载它(线程睡眠)。您知道为什么会发生这种情况或如何解决问题吗?这是我下载文件的功能

    /*XML read*/
private String downloadUrl(String myurl) throws IOException {
    InputStream is = null;
    int len = 100000;

    try {
        URL url_get = new URL(myurl);
        HttpURLConnection conn = (HttpURLConnection) url_get.openConnection();

        conn.setReadTimeout(15000 /* milliseconds */);
        conn.setConnectTimeout(15000 /* milliseconds */);

        conn.setRequestMethod("GET");
        conn.setDoInput(true);
        // Starts the query
        conn.connect();
        is = conn.getInputStream();
        String contentAsString = readIt(is, len);  
        return contentAsString;

    // Makes sure that the InputStream is closed after the app is
    // finished using it.
    } finally {
        if (is != null) {
            is.close();
        } 
    }
}

public String readIt(InputStream stream, int len) throws IOException, UnsupportedEncodingException {

    Reader reader = null;

    reader = new InputStreamReader(stream, "UTF-8");        
    char[] buffer = new char[len];
    reader.read(buffer);


    return new String(buffer);

}

我正在使用线程来启动功能。

这是线程:

Thread thread =  new Thread(new Runnable() { 
        public void run() {

            try {
                Thread.sleep(100);

            while (while_start)
            {
                if(While_getadat){



                try {


                get_xml = downloadUrl(URL_IMEI);
                Thread.sleep(2000); 

                Global_XML_data=red_xml(get_xml);
                Thread.sleep(1000);
                While_getadat=false;

                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

                                }

            }
                }

                            }

更新

有趣的事情是在调试模式下程序正常工作我得到了每一条数据

4

1 回答 1

0

您会考虑使用 AsyncTask 而不是手动启动线程吗?这是 POST(与您的问题中的 GET 相比)到 URL 的工作示例:

/**
 * Call a RESTful API to post a json
 * @param url
 * @param jsonObject
 */
private void postJson(URL url, JSONObject jsonObject) {
    HttpURLConnection conn = null;
    try {
        conn = (HttpURLConnection) url.openConnection();
        conn.setRequestProperty("Content-Type", "application/json");
        conn.setDoOutput(true);
        conn.setChunkedStreamingMode(0);
        conn.setUseCaches(false);

        OutputStream out = new BufferedOutputStream(conn.getOutputStream());
        String jsonString = jsonObject.toString();
        Log.i("ArtistRegistrationActivity", "Sending " + jsonString + " to " + conn.getURL().toString());
        out.write(jsonString.getBytes());
        out.flush();
        out.close();
    } catch (IOException e) {
        Log.e("ArtistRegistrationActivity", e.toString());
    } finally {
        conn.disconnect();
    }
}

/**
 * Call postJson in a separate thread.  Takes a URL and a JSONObject as param
 */
private class PostJsonTask extends AsyncTask<Object, Void, Void> {
    @Override
    protected Void doInBackground(Object... urlAndJson) {
        // params[0] is the url, params[1] is the Json to sent.
        URL url = (URL) urlAndJson[0];
        JSONObject json = (JSONObject) urlAndJson[1];
        postJson(url, json);
        return null;
    }

}
于 2013-07-21T21:23:57.490 回答