我需要一些帮助来弄清楚如何在哪个代码是接口AsyncTask
返回doInBackground()
值。这是一个例子
private class MyAsyncTask extends AsyncTask<Void, Void, Boolean> {
public MyAsyncTask() {
super();
// do stuff
}
@Override
protected Boolean doInBackground(Void... void) {
checkIfContentAvailable(new interfaceMediaAvailableToDownload() {
@Override
public void onComplete(boolean resutl) {
return result; //This must be doInBackground return value, not onSuccess which is Void
}
@Override
public void onInternetError() {
return false; //This must be doInBackground return value, not onSuccess which is Void
}
};
}
@Override
protected void onPostExecute(Boolean result) {
if (result){
//Do stuff
}else{
//Do stuff
}
}
}
显然,上面的代码不起作用,因为我不知道如何将onSuccess()
值返回给doInBackground()
。
我希望这足够清楚。
编辑
好吧,我的错,我认为隐藏MyInterface用法会更具可读性,但我通过您的回答意识到事实并非如此。所以我完成了代码以添加更多详细信息。
请问有什么想法吗? 提前谢谢你。
-
在执行
AsyncTask
的位置创建Mynterface的对象。 -
在
AsyncTask
内创建 MyInterface 的对象引用并设置接口对象。 -
然后调用
onSuccess
方法,如下所示` private class MyAsyncTask extends AsyncTask<Void, Void, Boolean> { MyInteface myInterface; setMyInterface(MyInterface interface){this.myInterface = interface;} public MyAsyncTask() { super(); // do stuff } @Override protected Boolean doInBackground(Void... void) { this.myInterface.onSuccess(); // or call on failure if failure happened } @Override protected void onPostExecute(Boolean result) { //Do stuff with result } }
'
像...
MyAsyncTask async = new MyAsyncTask();
async.setMyInterface(this);
async.execute();
在执行的位置实现接口。
这是你能做到的。