我正在使用如下的异步任务。但我需要能够根据我使用下面的类的不同活动在onPostExecute中调用不同的函数。例如,当一个活动加载时,我将使用下面的类,但当用户点击活动中的listitem时,我想使用下面的同一个类,但回调功能需要不同?有没有办法在android中执行此操作。
class PerformOPTask extends AsyncTask<Void, String, ServerOutput> {
// connector=new JSONConnector();
Connector connector;
String curUrl;
ServerOutput currentSO;
PerformOPTask(String url,ServerOutput serverOutput){
//connector = new UnitTestConnector();
connector = new JSONConnector();
curUrl=url;
currentSO=serverOutput;
}
@Override
protected ServerOutput doInBackground(Void... params) {
return connector.getData(URLUtils.getFormattedUrl(curUrl),currentSO);
}
@Override
protected void onPostExecute(ServerOutput output) {
displayData(output);
Toast.makeText(BaseFragmentActivity.this, "Done!", Toast.LENGTH_SHORT).show();
}
}
答案 0 :(得分:3)
您可以在适配器中添加包含onComplete方法或类似内容的接口。然后,您可以在AsyncTask
的构造函数中添加界面。像这样:
public interface OnTaskCompleteListener {
void onComplete(ServerOuptput output);
}
在onPostExecute()
中,您可以拨打onComplete()
答案 1 :(得分:1)
你可以将一些Object传递给PerformOPTask(例如,可能是Activity实例,或者是一些enumaration,如果有2个选项,则是boolean),它将识别谁使用此类以及在onPostExecute()上调用哪个函数。
答案 2 :(得分:0)
两个答案都是正确的,你需要为此注入一个依赖。而personnaly我更喜欢将它们注入我自己的AsyncTasks子类的构造函数中。
@Maria Neumayer解决方案的优势在于它将提供比使用@narek.gevorgyan
解决方案更通用,更抽象和更具可扩展性的东西。