0

GWTAsyncCallbackから取得したコンテンツで更新したい配列premisasObtenidasがあります。呼び出しは正常に機能し、onSuccessのコードが実行されますが、premisasObtenidasに返すものを追加して、getPremisasFromServerメソッドに返すと、空のリストが表示されます。

AsyncCallbackでの成功から取得したリストであるgetPremisasFromServerから戻るにはどうすればよいですか?

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 に答える