在活动之外使用AsyncTask有问题



我创建了一个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);
    }

相关内容

  • 没有找到相关文章

最新更新