2013-11-02 46 views
1

我有一個App Engine GWT應用程序。在我的客戶端代碼中,我獲取了登錄用戶的電子郵件,並且想要顯示它。我通過向服務器發送請求獲取用戶電子郵件。App Engine GWT代碼沒有在正確的時間執行

問題是正在執行getUserEmail()方法之後已執行onModuleLoad()方法,因此userEmail-String將變爲null,我想要顯示它。我已經檢查過,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。 如果你想回調後執行代碼,那麼你應該把它寫在內部類:

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中沒有其他選擇。你可以在內部類之外聲明UI。但是代碼mHTML.setHTML(result);必須在裏面。 – Hussar