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)是 未定义
为什么会这样?有人可以帮我解决这个问题吗?
答案 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)
异步任务不提供应用程序或活动上下文。如果此类包含在调用它的活动中,则可能必须传递上下文。