我知道可能有几种方法可以做到这一点,只是寻找最有效和最简洁的方法来实现它:
public Object giveMeNewObject() {
final Object result = null;
SomeApiClient.start(new Callback() { // starts an async process
@Override
public void onSuccess(Object somethingNew) {
result = somethingNew; //ERROR; can't set cause final
}
});
return result; //result is null, cause Async already finished
}
答案 0 :(得分:1)
阅读AsyncTask的文档。您的工作应该在doInBackground
方法中完成,结果应该由该方法返回。稍后,您可以使用get(Timeout)
方法检索返回的值。如果get
中的计算在给定的时间内没有完成,doInBackground
甚至会阻止。
您可以找到大量有关如何使用异步任务的示例。其中一个是API文档(上面的链接)
答案 1 :(得分:1)
从您的代码中 - 这是在飞行中修改的,所以正确的错误,并且一切都将按预期工作 - 调用者将等待,直到第三方完成处理并将获得该过程的结果:
public Object giveMeNewObject() {
CountDownLatch latch=new CountDownLatch(1);
Callback callback=new Callback() {
public sometype result=null;
@Override
public void onSuccess(Object somethingNew) {
result = somethingNew; //ERROR; can't set cause final
latch.countDown();
}
});
SomeApiClient.start(callback);
latch.await(sometimetowait);
return callback.result;
}