2017-05-29 31 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()以及? (正如我們在倒計時之前所稱的那樣) –

相關問題