App Engine GWT代码未在正确的时间执行

时间:2013-11-02 22:33:32

标签: google-app-engine gwt requestfactory

我有一个App Engine GWT应用程序。在我的客户端代码中,我收到登录用户的电子邮件,并希望显示它。我通过请求向服务器发送用户电子邮件。

问题是执行onModuleLoad()方法之后正在执行getUserEmail()方法,因此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; 
                    }
                }); 
}

1 个答案:

答案 0 :(得分: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);
                }
            }); 
}