当我第一次调用它工作正常时,我的适配器类中有AsyncTask
。但是,当我第二次打电话时,它不起作用。
我知道当我们想要在活动类中多次调用同一个任务时,我们必须调用new MyTask.execute()
。但是这里我在非活动类(即Adapter类)中创建了我的任务,所以这里无法实例化我的任务。我该如何解决这个问题?请提供任何解决方案。
这是我的代码:
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();
}
};
答案 0 :(得分:2)
但是我在非活动类(即Adapter类)中创建了我的任务,所以这里无法实例化我的任务。
事实并非如此。您可以从任何类中启动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...);