2012-01-19 6 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 %로 표시하고 업데이트하지 않습니다. 업데이트하려면 수정하는 방법? "이 링크 모양에서 http://developer.android.com/guide/topics/ui/dialogs.html

:

답변

1

doInBackground(...) 메서드에서 publishProgress(...)으로 전화해야합니다. 그것은 onProgressUpdate(...)이 호출되는 원인입니다. onProgressUpdate(...)은 마술처럼 불려지지 않습니다.

다목적으로 설계되었으며 게시하고자하는 '진행'데이터가있는 경우 publishProgress(...)을 통해 실행하는 것은 귀하의 책임입니다. 10 %의 경우 10과 같은 숫자이거나 First file downloaded...과 같은 문자열 일 수 있습니다.

AsyncTask 클래스는 게시 할 내용이 언제 무엇인지 또는 언제 publishProgress(...) (doInBackground(...))을 호출해야하는지 알 수 없습니다.

1

당신은 진행 상황을 추적하고이 activity.Here에보고 두 번째 스레드를 만들어야합니다이 작업을 수행하는 방법에 대한 예제가 링크입니다 두 번째 스레드가있는 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

관련 문제