在Activity之外使用AsyncTask时遇到麻烦

时间:2014-03-21 10:56:10

标签: java android android-asynctask

我已经创建了一个AsyncTask作为我活动的内部类。这很好用。

但是现在,因为我想在许多其他活动中重用这个AsyncTask,我试图为AsyncTask使用一个单独的类。

问题是现在我丢失了所有上下文引用。所以,例如代码:

    @Override
    protected void onPreExecute() {
        pDialog = ProgressDialog.show(myActvity.this, "Wait...", "sending data ...", true);
        pDialog.setCancelable(false);
        super.onPreExecute();
    }

无法正常工作,因为show方法中的上下文无法解析。

我该如何解决这个问题?

3 个答案:

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