AsyncTask中的Android ProgressDialog

时间:2014-10-22 22:35:32

标签: android android-asynctask progressdialog

我无法在AsyncTask中运行ProgressDialog:

private class Upload extends AsyncTask<String, Void, Void> {
ProgressDialog pd;

    protected void onPreExecute() {
        super.onPreExecute();
            pd = new ProgressDialog(Activity.this);
            pd.setMessage("Message");
            pd.setIndeterminate(false);
            pd.setMax(100);
            pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
            pd.setCancelable(false);
            pd.show();
        }

       @Override
        protected Void doInBackground(String... params) {

                .......

                 public void write(byte[] bts, int st, int end) throws IOException {
                            totalSent += end;
                            progress = (int) ((totalSent / (float) contentLength) * 100);
                            publishProgress("Loaded "+progress+"%");
                            out.write(bts, st, end);
                        } 

                 .......

                }

            protected void onProgressUpdate(String... progress) {
            Log.d("ANDRO_ASYNC", progress[0]);
            pd.setProgress(Integer.parseInt(progress[0]));
        }


    protected void onPostExecute(Void result) {
                  super.onPostExecute(result);
          if (pd != null)
          {
             pd.dismiss();
          } 
              }

进度对话框有效,但没有进展。但是在日志中我看到,进展正常。 因此,没有进展中的问题。

对于上面的代码我得到一个错误,说“AsyncTask字符串,Void,Void类型中的方法publishProgress(Void ...)不适用于参数(字符串)”。

无论我做什么,它都不起作用。我想,我想念一些东西。请帮忙)

2 个答案:

答案 0 :(得分:0)

您正在尝试对包含parseInt的字符串执行"Loaded "+progress+"%"。它不起作用。试试这个:

publishProgress(""+progress);

// [...]

protected void onProgressUpdate(String... progress)
{
    Log.d("ANDRO_ASYNC", "Loaded " + progress[0] + "%");
    pd.setProgress(Integer.parseInt(progress[0]));
}

答案 1 :(得分:0)

onProgressUpdate的参数在AsyncTask第二个泛型类型中定义。

改变这个:

private class Upload extends AsyncTask<String, Void, Void>

到此:

private class Upload extends AsyncTask<String, Integer, Void>

并更新此方法:

protected void onProgressUpdate(Integer... progress)
{
    Log.d("ANDRO_ASYNC", "Loaded " + progress[0] + "%");
    pd.setProgress(progress[0]);
}

您可以阅读有关AsynTask

的更多信息