2011-09-06 23 views
2

我正在使用Android 3.0和3.1。 我在我的應用程序中使用類AndroidHttpClient並執行我使用execute(HttpUriRequest)。來自AndroidHttpClient的進度通知

我在發送數據時想要更新的UI中有一個進度條。 有沒有什麼辦法從AndroidHttpClient獲取有關數據發送進度的通知(我猜它不會一次性發送整個緩衝區)?

感謝

+0

您可以使用'AsyncTask'進行此操作。參考此文檔:http://developer.android.com/reference/android/os/AsyncTask.html –

+0

可能的重複:http://stackoverflow.com/questions/ 254719/file-upload-with-java-with-progress-bar –

回答

1

爲了跟蹤數據發送到服務器時的進展,你必須包裝正在發送的底層HTTP實體。如果您繼承HttpEntityWrapper並覆蓋writeTo(),則可以使用FilterOutputStreamOutputStream進行包裝,即將流寫入服務器。

+0

我已經包裝了OutputStream類,並對writeTo()進行了覆蓋。 現在數據被分成幾個部分並用for循環發送。 – Yaniv

+0

並且隨着每次writeTo()調用的完成,您都可以調用回執行進度的某個偵聽器? –

0

我認爲你需要的AsyncTask例如,可能是它會幫助你::

private class xyz extends AsyncTask<Void, Void, Void> { 
      private final ProgressDialog dialog = new ProgressDialog(tranning.this); 
      @Override 
      protected void onPreExecute() { 
       this.dialog.setMessage("Please Wait..."); 
       this.dialog.show(); 

       // put your code which preload with processDialog 
      } 

      @Override 
      protected Void doInBackground(Void... arg0) { 

       // put you code here 


       return null; 
      } 
      @Override 
      protected void onPostExecute(final Void unused) { 
       //if (this.dialog.isShowing()) { 
       // this.dialog.dismiss(); 

       //} 

      } 
     } 

,並用它在你的主類::

new xyz().execute(); 
+1

如果你發現自己在幾個問題上粘貼相同的答案,很有可能你應該將一個標記爲重複。如果另一個問題被合併到這個問題中,完全相同的答案將會被重複。我並不是說你提供了一個不錯的答案,但是在多個地方發佈同一個答案時要小心。 –

+0

好吧,我會在我的腦海裏嘀咕 –

+0

我明白你的方法,但也許你應該提到'onProgressUpdate' - 在asynctask中的方法,因爲那個實際上傳達了任務的進度。我無法在你的答案中找到它。但無論如何,這是一個很好的方法。 – katzenhut