ProgressDialog使用AsyncTask生成构造函数未定义错误

Nav*_*Nav 0 android progressdialog android-asynctask

public class async extends AsyncTask<String, Integer, String>{
ProgressDialog prog;
@Override
protected void onPreExecute() {

    super.onPreExecute();
    prog=new ProgressDialog(async.this);//This is chowing error 
    prog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
    prog.setMax(100);
    prog.show();

}

    @Override
    protected String doInBackground(String... params) {
        for (int i = 0; i < 10; i++) {
        publishProgress(5);
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        return null;
    }

@Override
protected void onPostExecute(String result) {

    super.onPostExecute(result);
    prog.dismiss();
}
@Override
protected void onProgressUpdate(Integer... values) {
    prog.setProgress(values[0]);
    super.onProgressUpdate(values);
}
}
Run Code Online (Sandbox Code Playgroud)

上面的代码产生错误:

构造函数ProgressDialog(AndroidasynctaskActivity.async)未定义

为什么会这样?有人可以帮我解决这个问题吗?

Mar*_*nto 6

如前所述,发生这种情况的原因是因为ProgressDialog您使用的构造函数需要一个Context对象.这是一个如何做到这一点的例子.

修改您的async类并添加一个接受Context对象的单参数构造函数.然后修改onPreExecute方法使用说Context.例如:

public class async extends AsyncTask<String, Integer, String>{

  private Context context;
  ProgressDialog prog;

  public async(Context context) {
    this.context = context;
  }


  @Override
  protected void onPreExecute() {
    super.onPreExecute();
    prog=new ProgressDialog(context); 
    prog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
    prog.setMax(100);
    prog.show();
  }

  // ...
}
Run Code Online (Sandbox Code Playgroud)

然后实例化并运行AsyncTask:

async mTask = new async(context);
mTask.execute(params);
Run Code Online (Sandbox Code Playgroud)