2013-07-21 3 views
1

Я пытаюсь загрузить XML-файл с сервера, и я использую парсер XMLpull для его обработки, но он не загружает все данные каждый раз. Даже если я попробую подождать, чтобы скачать его (нить сна). У вас есть идея, почему это происходит или как решить проблему? Это моя функция, загрузить файл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 (vs 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

Почему бы лучше ансинтастку? – meklod400

+0

Вы можете проверить это: http://developer.android.com/reference/android/os/AsyncTask.html –

Смежные вопросы