Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java GWT异步回调-内部类共享_Java_Gwt_Inner Classes_Asynccallback - Fatal编程技术网

Java GWT异步回调-内部类共享

Java GWT异步回调-内部类共享,java,gwt,inner-classes,asynccallback,Java,Gwt,Inner Classes,Asynccallback,我有一个数组premisasObtenidas,我想用从GWT异步回调中获得的内容更新它。调用工作正常,onSuccess的代码执行,但当我尝试添加它返回到premisasObtenidas的内容以在GetPremissFromServer方法上返回时,我得到一个空列表 如何从GetPremissFromServer返回异步回调成功后得到的列表 private List<PremisaDTO> getPremisasFromServer() { final List

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

如何从GetPremissFromServer返回异步回调成功后得到的列表

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 

    }
private List getpremissfromserver(){
最终列表premisasObtenidas=新ArrayList();
//premisasObtenidas在外部类上声明
myService.mostrarpremias(
新的AsyncCallback(){
失败时的公共无效(可丢弃){
Window.alert(“Falla al-cargar premisas”+catch.getMessage());
}
成功时公共无效(列表premisasEnBD){
alert(“Exito al obtener premisas”+premisasEnBD.get(0.gettempermisa());

对于(int i=0;i这是一个子例程-异步回调不会以内联方式发生-即,
onSuccess
在您点击return语句时尚未执行

回调将在将来某个时候发生(当服务器完成它的工作时)

你可能需要的是

final List<PremisaDTO> premisasObtenidas = new ArrayList<PremisaDTO>();
final List premisasObtenidas=new ArrayList();
要成为类级别(不是函数的本地)。您的
onSuccess()
填充列表,然后调用其他类方法来处理列表

这正是acync编程的本质。因为涉及到服务器,您不希望客户端变得不活跃。您要求服务器做一些事情,完成后,您(客户端)会被告知这一点(您的程序可以在中间继续做其他事情)