2013-11-02 3 views
1

У меня есть приложение GWT для приложений. В моем клиентском коде я получаю электронную почту зарегистрированных пользователей и хочу ее отобразить. Я получаю электронную почту пользователей по запросу на сервер.Приложение Engine Код GWT не выполняется в нужное время

Проблема заключается в том, что метод getUserEmail() в настоящее время выполняется после метода onModuleLoad() был выполнен, так что USEREMAIL струна повернет вверх как нуль, где я хочу, чтобы отобразить его. Я проверил, что метод getUserEmail() фактически возвращает правильную часть информации, моя проблема, как уже упоминалось, равна , когда Я получаю информацию, которую хочу. Может ли кто-нибудь указать мне, почему это происходит и как это исправить?

public String userEmail; 

@Override 
public void onModuleLoad() { 
     getUserEmail(); 
     HTML mHTML = new HTML(); 
     mHTML.setHTML("<HTML><BODY> Logged in as " + userEmail + "</BODY></HTML>"); 
     RootPanel.get().add(mHTML); 
} 

public void getUserEmail(){ 

    requestFactory.getUserEmailRequest().getUserEmail().fire(
     new Receiver<String>() { 
       @Override 
       public void onSuccess(String result) { 
         userEmail = result; 
        } 
       }); 
} 

ответ

3

Метод getUserEmail() является Asynchronous Method Call. Если вы хотите выполнить код после CallBack, то вы должны записать его во внутреннем классе:

public void getUserEmail(){ 

requestFactory.getUserEmailRequest().getUserEmail().fire(
    new Receiver<String>() { 
      @Override 
      public void onSuccess(String result) { 
        userEmail = result; 

        HTML mHTML = new HTML(); 
        mHTML.setHTML("<HTML><BODY> Logged in as " + userEmail + "</BODY></HTML>"); 
        RootPanel.get().add(mHTML); 
       } 
      }); 
} 
+0

Спасибо, вот что я сделал, но в любом случае, чтобы сделать() синхронно getUserEmail? – Drublic

+1

Нет. В GWT нет другого выбора. Вы можете объявить пользовательский интерфейс вне внутренних классов. Но код mHTML.setHTML (результат); должен быть внутри. – Hussar