如何获取上传进度

时间:2012-01-19 02:09:38

标签: android android-dialog android-progressbar

我使用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 个答案:

答案 0 :(得分:1)

您将需要创建第二个线程来跟踪进度并将其报告给此活动。这是一个链接,其中有一个示例,说明如何完成此操作: http://developer.android.com/guide/topics/ui/dialogs.html

在此链接中查找“带有第二个线程的示例ProgressDialog”

答案 1 :(得分:1)

您必须在publishProgress(...)方法中致电doInBackground(...)。这是导致onProgressUpdate(...)被调用的原因。 onProgressUpdate(...)不会被神奇地称为。

它旨在实现多用途,您有责任通过publishProgress(...)使用您希望其发布的“进度”数据来触发它。它可以是数字,例如10为10%,或者是字符串,例如First file downloaded...

AsyncTask班级不知道您要发布什么内容或何时发布 - 这就是publishProgress(...)doInBackground(...)的调用意图。