Как получить прогресс загрузки - PullRequest
1 голос
/ 19 января 2012

Я использую методы 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% и никогда не обновляется.Как изменить, чтобы обновить его?

Ответы [ 2 ]

1 голос
/ 19 января 2012

Вы должны вызвать publishProgress(...) в вашем doInBackground(...) методе.Это то, что вызывает onProgressUpdate(...).onProgressUpdate(...) не называется волшебным образом.

Он предназначен для многоцелевого использования, и вы несете ответственность за его запуск через publishProgress(...) с любыми данными о прогрессе, которые вы хотите опубликовать.Он может быть числовым, например 10 для 10 процентов, или строкой, такой как First file downloaded....

. Класс AsyncTask не знает, что вы хотите опубликовать, или когда - это вызов publishProgress(...) с doInBackground(...) предназначен для

1 голос
/ 19 января 2012

вам нужно будет создать второй поток, который будет отслеживать прогресс и сообщать об этом в это действие. Вот ссылка, в которой есть пример того, как этого добиться: http://developer.android.com/guide/topics/ui/dialogs.html

В этой ссылке смотритедля "Примера ProgressDialog со вторым потоком"

...