我创建了一个AsyncTask作为我的活动的内部类。这个效果不错。
但是现在,因为我想重用这个AsyncTask在许多其他活动,我试图使用一个单独的类AsyncTask。
问题是现在我失去了所有的上下文引用。因此,例如代码:
@Override
protected void onPreExecute() {
pDialog = ProgressDialog.show(myActvity.this, "Wait...", "sending data ...", true);
pDialog.setCancelable(false);
super.onPreExecute();
}
不能工作,因为show方法中的上下文不能解析。
我该如何解决这个问题?
按以下方式创建AsyncTask类:-
public class MyTask extends AsyncTask<Void,Void,Void>{
private Context mContext; // context reference
private ProgressDialog pDialog;
public MyTask(Context context){ //constructor
this.mContext = context;
}
@Override
protected void onPreExecute() {
pDialog = ProgressDialog.show(mContext, "Wait...", "sending data ...", true);
pDialog.setCancelable(false);
super.onPreExecute();
}
}
并使用它:-
MyTask mTask = new MyTask(Activity.this);
mTask.execute();
在Async任务类的构造函数中传递一个上下文。例如,你可以这样定义你的AsynTask类构造函数:
public MyAsyncTask(Context con){
this.context = con;
}
,然后将调用异步任务的活动的上下文传递给它。
MyAsyncTask task = new MyAsyncTask(CurrentActivity.this);
试试这个:从你调用task的地方:
YourAsyncTaskTaskClass task = new YourAsyncTaskTaskClass(activityContext);
task.execute();
在你的线程类中:
Context context;
public YourAsyncTaskTaskClass(Context context) {
this.contex = context;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
d = ProgressDialog.show(context, "Wait...", "sending data ...", true);
}