我在保存RPC结果时遇到问题。基本上调用是成功的,但是当我尝试将其保存在变量中时,它似乎超出了范围。
private String userName = "default";
authService.retrieveUserData(new AsyncCallback<UserData>() {
@Override
public void onSuccess(UserData result) {
userName = result.getUserName();
shell.setError("The userName is " + userName + "!");
}
@Override
public void onFailure(Throwable caught) {
//I've checked and it is not failing.
}
});
shell.getLoginWidget().setUserName(userName);
shell是一个添加到我的RootLayoutPanel的Composite。它包含一个DivElement,其中InnerText由shell.setError(String)设置。 shell还有一个带有SpanElement的LoginWidget,其内部文本由shell.getLoginWidget()。setUserName(String)设置。 userName显然是一个初始化为“default”的String。
问题是shell.setError(“用户名是”+ userName +“!”); (在AsyncCallback内部)将InnerText设置为当前登录的任何人。但是shell.getLoginWidget()。setUserName(userName); (在AsyncCallback之外)将InnerText设置为“default”。
我尝试了很多不同的东西,它们似乎都有相同的范围问题。令我困惑的是this示例显示了几乎完全相同的保存RPC结果的技术。
答案 0 :(得分:1)
GWT RPC方法是asynchronous - 它们的返回值不能立即获得。您发布的代码的控制流程如下:
userName
设为“默认”。authService
询问UserData
。这会触发`UserData。XMLHttpRequest
userName
设置为当前值userName
,即“默认”。userName
变量将被设置为返回值。正确的做法是在onSuccess
的{{1}}方法中设置用户名:
AsyncCallback