AsyncTask :从doInBackground中的接口回调返回



我需要一些帮助来弄清楚如何在哪个代码是接口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用法会更具可读性,但我通过您的回答意识到事实并非如此。所以我完成了代码以添加更多详细信息。

请问有什么想法吗? 提前谢谢你。

  1. 在执行AsyncTask的位置创建Mynterface的对象。

  2. AsyncTask内创建 MyInterface 的对象引用并设置接口对象。

  3. 然后调用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();

在执行的位置实现接口。

这是你能做到的。

相关内容

  • 没有找到相关文章

最新更新