2011-09-06 58 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