方法等待返回时的Java异步调用

时间:2016-06-04 14:35:31

标签: java asynchronous android-asynctask

我知道可能有几种方法可以做到这一点,只是寻找最有效和最简洁的方法来实现它:

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
}

2 个答案:

答案 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;

}