0

当我AsyncTask第一次打电话时,我的适配器类工作正常。但是当我第二次打电话时它不起作用。

我知道当我们想在活动类中多次调用同一个任务时,我们必须调用new MyTask.execute()。但是这里我在非活动类(即适配器类)中创建了我的任务,所以这里无法实例化我的任务。我该如何解决这个问题?请提供任何解决方案。

这是我的代码:

public AsyncTask<String,Void,Void> mytaskfavorite = new AsyncTask<String,Void,Void>() {
  protected void onPreExecute() {
    pd = new ProgressDialog(mContext);
    pd.setMessage("Loading...");
    pd.setProgressStyle(ProgressDialog.STYLE_SPINNER);
    //proDialog.setIcon(R.drawable.)
    pd.setCancelable(false);
    pd.show();
    System.out.println("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
  }
  @Override
  protected Void doInBackground(String...code) {
    String buscode = code[0];
    // TODO Auto-generated method stub
    addFavoriteBusinessSelection.addFavoriteBusinessBusinessSelection(buscode);
    System.out.println("##################################" + buscode);
    return null;
  }
  @Override
  protected void onPostExecute(Void res) {
    pd.dismiss();
  }
};
4

1 回答 1

2

但是这里我在非活动类(即适配器类)中创建了我的任务,所以这里无法实例化我的任务。

那不是真的。您可以从您希望的任何类启动 AsyncTask,并保证 doInBackground 将在单独的线程中执行,而其他方法在被调用线程(通常是 UI Looper 线程)中执行。

要调用它几种类型,您应该使用它创建一个新类,如下所示:

public Class TaskFavorite extends new AsyncTask<String,Void,Void>() {

  // You can optionally create a constructor to receiver parameters such as context
  // for example:
  private Context mContext
  public TaskFavorite(Context c){
     mContext = c;
  }

  protected void onPreExecute() {
    pd = new ProgressDialog(mContext);
    pd.setMessage("Loading...");
    pd.setProgressStyle(ProgressDialog.STYLE_SPINNER);
    //proDialog.setIcon(R.drawable.)
    pd.setCancelable(false);
    pd.show();

    // Don't use println in Android, Log. gives you a much better granular control of your logs
    System.out.println("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
  }
  @Override
  protected Void doInBackground(String...code) {
    String buscode = code[0];
    // TODO Auto-generated method stub
    addFavoriteBusinessSelection.addFavoriteBusinessBusinessSelection(buscode);
    System.out.println("##################################" + buscode);
    return null;
  }
  @Override
  protected void onPostExecute(Void res) {
    pd.dismiss();
  }
};

然后从你的代码(任何地方,适配器或活动,或片段,甚至你调用的循环)

TaskFavorite task = new TaskFavorite(getContext()); // how you get the context to pass to the constructor may vary from where you're calling it, but most adapters to have one
task.execute(... parameters...);
于 2013-04-16T10:23:14.210 回答