我有一个方法,我调用另一个有回调的方法。我想在离开我的方法之前收到这个回调。我看到其他一些使用了锁存器的帖子。我的代码如下所示:
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()方法。我想这是一个确定性的问题......关于如何解决这个问题的任何想法?
编辑:添加了我创建锁存器的代码行。
答案 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();
}
}