Pregunta

I have an App Engine GWT app. In my client code, I'm getting the logged in users email, and want to display it. I get the users email by a request to the server.

The problem is that the getUserEmail() method is being executed after the onModuleLoad() method has been executed, so that the userEmail-String will turn up as null where i want to display it. I have checked that the getUserEmail()-method actually returns the correct piece of info, my problem, as mentioned, is when i get the info i want. Can anyone point me anywhere on why this happens and how to fix this?

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; 
                    }
                }); 
}
¿Fue útil?

Solución

Method getUserEmail() is Asynchronous Method Call. If you want to execute code after callBack then you should write it in the inner class :

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);
                }
            }); 
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top