【问题标题】:How to get the upload progress如何获取上传进度
【发布时间】:2012-01-19 02:09:37
【问题描述】:

我使用 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%,并且永远不会更新。 如何修改更新?

【问题讨论】:

    标签: android android-dialog android-progressbar


    【解决方案1】:

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

    它被设计为多用途,您有责任通过publishProgress(...) 使用您希望它发布的任何“进度”数据来触发它。它可以是数字,例如 10,表示 10%,也可以是字符串,例如 First file downloaded...

    AsyncTask 类不知道您要发布什么或何时发布 - 这就是从 doInBackground(...) 调用 publishProgress(...) 的目的。

    【讨论】:

      【解决方案2】:

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

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

      猜你喜欢
      • 1970-01-01
      • 2014-01-05
      • 1970-01-01
      • 2011-03-02
      • 1970-01-01
      • 1970-01-01
      • 2018-03-07
      • 1970-01-01
      相关资源
      最近更新 更多