0

我有一个数组 premisasObtenidas,我想用从 GWT AsyncCallback 获得的内容来更新它。该调用工作正常,并且 onSuccess 的代码执行,但是当我尝试将它返回的内容添加到 premisasObtenidas 以在我的 getPremisasFromServer 方法中返回它时,我得到一个空列表。

如何从 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 

    }
4

1 回答 1

1

这是一个子例程 - 异步回调不会内联发生 - 即onSuccess在您点击 return 语句时尚未执行。

回调将在将来的某个时间发生(当服务器完成它的事情时)。

你可能需要的是

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

成为类级别(不是函数的本地)。您onSuccess()填充列表,然后调用其他一些类方法来处理列表。

这只是 acync 编程的本质。由于涉及服务器并且您不希望客户端变得无反应。您要求服务器做某事,完成后您(客户端)会被告知(您的程序可以自由地在中间继续做其他事情)。

于 2012-07-20T23:03:28.137 回答