我已经创建了一个AsyncTask作为我活动的内部类。这很好用。
但是现在,因为我想在许多其他活动中重用这个AsyncTask,我试图为AsyncTask使用一个单独的类。
问题是现在我丢失了所有上下文引用。所以,例如代码:
@Override
protected void onPreExecute() {
pDialog = ProgressDialog.show(myActvity.this, "Wait...", "sending data ...", true);
pDialog.setCancelable(false);
super.onPreExecute();
}
无法正常工作,因为show方法中的上下文无法解析。
我该如何解决这个问题?
答案 0 :(得分:8)
按以下方式创建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();
答案 1 :(得分:3)
在Async任务类的构造函数中传递上下文。例如,你可以像这样定义你的AsynTask类构造函数:
public MyAsyncTask(Context con){
this.context = con;
}
然后将您调用异步任务的活动的上下文传递给它。
MyAsyncTask task = new MyAsyncTask(CurrentActivity.this);
答案 2 :(得分:1)
试试这个: 你从哪里调用任务:
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);
}