2013-07-21 31 views
1

我想從服務器下載一個XML文件,我使用XMLpull解析器來處理它,但它不會每次都下載整個數據。即使我嘗試等待下載它(線程休眠)。你有什麼想法爲什麼會發生這種情況或如何解決這個問題? 這是我的功能是下載我使用線程ofcourse啓動功能的文件Android沒有得到整個數據

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

           } 

      } 
       } 

          } 

UPDATE

有趣thigs,在調試模式下工作方案properlly我拿到每一塊DATAS

+0

我真的不知道爲什麼。任何想法? – meklod400

回答

0

,您會考慮使用替代的AsyncTask手動啓動線程?這裏是一個POSTing(在你的問題與GET)的工作示例:

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

} 
+0

爲什麼會更好的ansynctask? – meklod400

+0

你可能想檢查一下:http://developer.android.com/reference/android/os/AsyncTask.html –