离开方法之前如何等待回调(Java)

时间:2017-05-29 12:06:37

标签: java android

我有一个方法,我调用另一个有回调的方法。我想在离开我的方法之前收到这个回调。我看到其他一些使用了锁存器的帖子。我的代码如下所示:

public  void requestSecurityToken(<some params>){
    final CountDownLatch latch = new CountDownLatch(1);
    MyFunction.execute(<someParams>, new RequestListener<Login>() {
        @Override
        public void onRequestFailure(SpiceException spiceException) {
            //TODO
        }

        @Override
        public void onRequestSuccess(Login login) {
            //handle some other stuff
            latch.countDown();

        }
    });


    try {
        latch.await();
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}

这不起作用,该方法卡在await()函数中。会发生的是,该方法立即跳转到await(),并且不会再次进入onRequestSuccess()或onRequestFailure()方法。我想这是一个确定性的问题......关于如何解决这个问题的任何想法?

编辑:添加了我创建锁存器的代码行。

1 个答案:

答案 0 :(得分:1)

当你这样做时

new RequestListener<Login>

您正在将对象传递给您的函数,该函数实现了一个接口 这就是为什么不调用这些方法的原因,只有在获得请求结果(成功或失败)时才会调用这些方法 你可以这样做。

MyFunction.execute(<someParams>, new RequestListener<Login>() {
    @Override
    public void onRequestFailure(SpiceException spiceException) {
        someFunction();
    }

    @Override
    public void onRequestSuccess(Login login) {
        //handle some other stuff
        someFunction();
        latch.countDown();

    }
});





public void someFunction()[
   try {
    latch.await();
} catch (InterruptedException e) {
    e.printStackTrace();
}
  }