Java GWT异步回调-内部类共享
我有一个数组premisasObtenidas,我想用从GWT异步回调中获得的内容更新它。调用工作正常,onSuccess的代码执行,但当我尝试添加它返回到premisasObtenidas的内容以在GetPremissFromServer方法上返回时,我得到一个空列表 如何从GetPremissFromServer返回异步回调成功后得到的列表Java GWT异步回调-内部类共享,java,gwt,inner-classes,asynccallback,Java,Gwt,Inner Classes,Asynccallback,我有一个数组premisasObtenidas,我想用从GWT异步回调中获得的内容更新它。调用工作正常,onSuccess的代码执行,但当我尝试添加它返回到premisasObtenidas的内容以在GetPremissFromServer方法上返回时,我得到一个空列表 如何从GetPremissFromServer返回异步回调成功后得到的列表 private List<PremisaDTO> getPremisasFromServer() { final List
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编程的本质。因为涉及到服务器,您不希望客户端变得不活跃。您要求服务器做一些事情,完成后,您(客户端)会被告知这一点(您的程序可以在中间继续做其他事情)