2017-05-29 76 views
1

我有一种方法可以在其中调用另一个具有回调的方法。我想在离开我的方法之前收到此回调。我看到一些其他使用闩锁的帖子。我的代码如下所示:如何在离开方法之前等待回调(Java)

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

当你在做这个

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(); 
} 
    } 
+0

纠正我,如果我错了,但在这种情况下,我的功能不会卡在await()以及? (正如我们在倒计时之前所称的那样) –

相关问题