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

时间:2012-02-29 21:18:47

标签: android android-asynctask progressdialog

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);
}
}

以上代码产生错误:

  

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

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

2 个答案:

答案 0 :(得分: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();
  }

  // ...
}

然后实例化并运行此AsyncTask

async mTask = new async(context);
mTask.execute(params);

答案 1 :(得分:2)

异步任务不提供应用程序或活动上下文。如果此类包含在调用它的活动中,则可能必须传递上下文。