2012-01-19 84 views
1

我用doInBackGround和方法的AsyncTask顯示進度如下:如何獲得上傳進度

class UploadFile extends AsyncTask<String, String, String> { 
    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     showDialog(DIALOG_DOWNLOAD_PROGRESS); 
    } 

    @Override 
    protected String doInBackground(String... aurl) { 
     upload(ActionUrl, uploadFile, savepath, newName); 
     return null; 
    } 

    protected void onProgressUpdate(String... progress) { 
     mProgressDialog.setProgress(Integer.parseInt(progress[0])); 
    } 

    @Override 
    protected void onPostExecute(String unused) { 
     dismissDialog(DIALOG_DOWNLOAD_PROGRESS); 
    } 
} 

upload(ActionUrl, uploadFile, savepath, newName);方法是如this。 而下面的代碼:

@Override 
protected Dialog onCreateDialog(int id) { 
    switch (id) { 
     case DIALOG_DOWNLOAD_PROGRESS: //we set this to 0 
      mProgressDialog = new ProgressDialog(this); 
      mProgressDialog.setMessage("Downloading file..."); 
      mProgressDialog.setIndeterminate(false); 
      mProgressDialog.setMax(100); 
      mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); 
      mProgressDialog.setCancelable(true); 
      mProgressDialog.show(); 
      return mProgressDialog; 
     default: 
      return null; 
    } 
} 

及以下稱:

private ProgressDialog mProgressDialog; 
public static final int DIALOG_DOWNLOAD_PROGRESS = 0; 
new UploadFile().execute("test"); 

但進度對話框始終顯示爲0%,並且從不更新。 如何修改以更新它?

回答

1

您必須在doInBackground(...)方法中調用publishProgress(...)。這是導致onProgressUpdate(...)被調用的原因。 onProgressUpdate(...)並不神奇。

它被設計成多用途的,你有責任通過publishProgress(...)來觸發它,併發布你希望發佈的任何「進度」數據。它可以是數字,例如10 10%或字符串,例如First file downloaded...

AsyncTask類不知道你想要發佈什麼或什麼時候 - 這是從doInBackground(...)打電話給publishProgress(...)的意思。

1

,您將需要創建第二個線程將跟蹤進展情況,並報告給這個activity.Here是對如何做到這一點的例子鏈接: http://developer.android.com/guide/topics/ui/dialogs.html

在這個環節中尋找「示例ProgressDialog與第二個線程「

+0

另一個問題是如何知道迄今有多少字節上傳? – brian

+0

http://stackoverflow.com/questions/6851024/i-need-know-how-much-bytes-has-been-uploaded-for-update-a-progress-bar-android <<看看這篇文章。 – Viking