1

I am trying to download an XML file from a server and I use XMLpull parsher to handle it but It doesnt download the whole data everytime. Even if I Try To wait to download it (thread sleep). Do you have any idea why is this happen or how to solved the problem? This is my function which is download the file

    /*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);

}

I am using thread to start the function ofcourse.

Here is the thread:

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();
                }

                                }

            }
                }

                            }

UPDATE

Interesting thigs that in debug mode the program work properlly I got every piece of datas

dakshbhatt21
  • 3,558
  • 3
  • 31
  • 40
meklod400
  • 129
  • 1
  • 2
  • 12

1 Answers1

0

Would you consider using AsyncTask instead of starting a thread manually? Here is a working example of POSTing (vs GET in your question) to a 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;
    }

}
Cecil Pang
  • 58
  • 1
  • 4