2012-07-20 63 views
0

我有一個數組,premisasObtenidas,我想更新從GWT AsyncCallback中獲得的內容。該調用工作正常,onSuccess的代碼執行,但是當我嘗試添加它返回到premisasObtenidas以在我的getPremisasFromServer方法上返回它時,我得到一個空列表。GWT AsyncCallback - 內部類共享

如何從getPremisasFromServer(我從AsyncCallback中的成功獲取的列表)返回?

private List<PremisaDTO> getPremisasFromServer() { 

     final List<PremisaDTO> premisasObtenidas = new ArrayList<PremisaDTO>(); 
      //premisasObtenidas is declared on the outside class   

     myService.mostrarPremisas( 

       new AsyncCallback<List<PremisaDTO>>() { 

         public void onFailure(Throwable caught){ 


          Window.alert("Falla al cargar premisas" + caught.getMessage()); 

         } 
         public void onSuccess(List<PremisaDTO> premisasEnBD){ 

          Window.alert("Exito al obtener premisas " + premisasEnBD.get(0).getTextoPremisa()); 
          for (int i=0; i<premisasEnBD.size();i++){ 
           PremisaDTO aux = new PremisaDTO(); 
           aux.setId(premisasEnBD.get(i).getId()); 
           aux.setTextoPremisa(premisasEnBD.get(i).getTextoPremisa()); 
           premisasObtenidas.add(aux); 


          } 
         } 
       }); 

     return premisasObtenidas; //here premisasObtenidas has size 0 

    } 

回答

1

這是一個子程序 - 你打你的return語句即onSuccess沒有被時間執行 - 異步回調不在內部發生。

回調將在未來一段時間發生(當服務器完成時)。

你可能需要的是

final List<PremisaDTO> premisasObtenidas = new ArrayList<PremisaDTO>(); 

是一流的水平(不是本地的功能)。您的onSuccess()填充列表,然後調用其他類方法對列表執行某些操作。

這只是acync編程的本質。由於涉及服務器,您不希望客戶端變得無法使用。你要求服務器做一些事情,當它完成後,你(客戶)會被告知它(你的程序可以繼續在中間做其他事情)。