2012-07-18 38 views
0

嗨,我在GWT編程初學者,我已經與此AsyncCallback的以及我的代碼有問題depared是這樣的:問題與AsyncCallback的GWT中

但是,當我把這個方法返回之前的列表回叫可以組成清單。

`public static ArrayList<Appointment> build(Usuario user,AppointmentStyle[] styles) { 
     final ArrayList<Appointment> list = new ArrayList<Appointment>(); 
     callback = new AsyncCallback<List<Compromisso>>() { 

      @Override 
      public void onFailure(Throwable caught) { 
       MessageBox.alert("Erro", "Contate o administrador", null); 

      } 

      @Override 
      public void onSuccess(List<Compromisso> result) { 
       compromissos = result; 
      } 

     }; 
     getServico().listCompromisso(user, callback); 


     for (int i = 0; i < compromissos.size(); i++) { 
      Date now = new Date(); 
      now.setDate(compromissos.get(i).getData().getDate()); 

      Date start = (Date) now.clone(); 
      int hour = compromissos.get(i).getHorai().getHours(); 
      int min = compromissos.get(i).getHorai().getMinutes(); 
      start.setHours(hour); 
      start.setMinutes(min); 

      Date end = (Date) now.clone(); 
      end.setHours(compromissos.get(i).getHoraf().getHours()); 
      end.setMinutes(compromissos.get(i).getHoraf().getMinutes()); 

      Appointment appt = new Appointment(); 
      appt.setStart(compromissos.get(i).getHorai()); 
      appt.setEnd(compromissos.get(i).getHoraf()); 

      if (compromissos.get(i).getPrivacidade().getCodigo() == "1") { 
       appt.setTitle(compromissos.get(i).getTitulo()); 
       appt.setDescription(compromissos.get(i).getNota()); 
      } else if (compromissos.get(i).getPrivacidade().getCodigo() == "2") { 
       appt.setTitle(compromissos.get(i).getTitulo()); 
       appt.setDescription("Dados n&atilde;o disponiveis."); 
      } else { 

       appt.setTitle("Ocupado"); 
       appt.setDescription("Dados n&atilde;o disponiveis."); 
       appt.setStyle(AppointmentStyle.GREY); 
      } 
      if (compromissos.get(i).getPrioridade().getCodigo() == "1") { 
       appt.setStyle(AppointmentStyle.RED); 
      } else if (compromissos.get(i).getPrioridade().getCodigo() == "2") { 
       appt.setStyle(AppointmentStyle.GREEN); 
      } else if (compromissos.get(i).getPrioridade().getCodigo() == "3") { 
       appt.setStyle(AppointmentStyle.GREEN); 
      } 
      list.add(appt); 
     } 

     return list; 
    }` 

我該怎麼辦?

+0

看看類似的問題http://stackoverflow.com/questions/10014319/code-after-gwt-rpc-asynccallbak-will-not-be-executed/10015242#10015242 – hsestupin 2012-07-19 06:15:42

回答

0

我解決了從DB thx向所有項發送方法的問題。

0

您應該異步處理您的請求。問題是getServico().listCompromisso(user, callback);不等待服務器響應。

打電話給你的列表處理的onSuccess內部和更新UI:

public static void updateModel (Usuario user,AppointmentStyle[] styles) { 
    final ArrayList list = new ArrayList(); 
    callback = new AsyncCallback>() { 

     @Override 
     public void onFailure(Throwable caught) { 
      MessageBox.alert("Erro", "Contate o administrador", null); 

     } 

     @Override 
     public void onSuccess(List<Compromisso> result) { 
      compromissos = result; 
      processResult(); 
      updateUi(); //TODO update your App(-UI) 
     } 

    }; 
    getServico().listCompromisso(user, callback); 
} 

/* I don't read all this stuff */ 
processResult(){ 
    for (int i = 0; i < compromissos.size(); i++) { 
     Date now = new Date(); 
     now.setDate(compromissos.get(i).getData().getDate()); 

     Date start = (Date) now.clone(); 
     int hour = compromissos.get(i).getHorai().getHours(); 
     int min = compromissos.get(i).getHorai().getMinutes(); 
     start.setHours(hour); 
     start.setMinutes(min); 

     Date end = (Date) now.clone(); 
     end.setHours(compromissos.get(i).getHoraf().getHours()); 
     end.setMinutes(compromissos.get(i).getHoraf().getMinutes()); 

     Appointment appt = new Appointment(); 
     appt.setStart(compromissos.get(i).getHorai()); 
     appt.setEnd(compromissos.get(i).getHoraf()); 

     if (compromissos.get(i).getPrivacidade().getCodigo() == "1") { 
      appt.setTitle(compromissos.get(i).getTitulo()); 
      appt.setDescription(compromissos.get(i).getNota()); 
     } else if (compromissos.get(i).getPrivacidade().getCodigo() == "2") { 
      appt.setTitle(compromissos.get(i).getTitulo()); 
      appt.setDescription("Dados n&atilde;o disponiveis."); 
     } else { 

      appt.setTitle("Ocupado"); 
      appt.setDescription("Dados n&atilde;o disponiveis."); 
      appt.setStyle(AppointmentStyle.GREY); 
     } 
     if (compromissos.get(i).getPrioridade().getCodigo() == "1") { 
      appt.setStyle(AppointmentStyle.RED); 
     } else if (compromissos.get(i).getPrioridade().getCodigo() == "2") { 
      appt.setStyle(AppointmentStyle.GREEN); 
     } else if (compromissos.get(i).getPrioridade().getCodigo() == "3") { 
      appt.setStyle(AppointmentStyle.GREEN); 
     } 
     list.add(appt); 
    } 
} 

編輯:

你可以找到關於異步遠程服務器通信一個很好的教程在GWT-Documentation