2012-07-20 87 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编程的本质。由于涉及服务器,您不希望客户端变得无法使用。你要求服务器做一些事情,当它完成后,你(客户)会被告知它(你的程序可以继续在中间做其他事情)。