首先,我想说我不确定它是否是将回调实现到Activity类的正确方法。我的目标是从数据库中获取用户列表并将其设置到我的视图中。
public class UserListActivity extends AbstractActivity implements UserListView.Presenter<GWTUser> {
private List<GWTUser> users;
@Override
public void start(AcceptsOneWidget panel, EventBus eventBus) {
view.setPresenter(this);
fetchUsers();
if (getUsers() == null) {
setUsers(new ArrayList<GWTUser>());
}
view.setUserList(getUsers());
panel.setWidget(view.asWidget());
}
@Override
public void fetchUsers() {
Defaults.setServiceRoot(GWT.getHostPageBaseURL());
UserAdminRestService userService = GWT.create(UserAdminRestService.class);
((RestServiceProxy)userService).setResource(new Resource("/user"));
userService.getUsers(new MethodCallback<List<GWTUser>>() {
@Override
public void onFailure(Method method, Throwable exception) {
// TODO getUsers error handling
System.out.println(exception.getMessage().toString());
}
@Override
public void onSuccess(Method method, List<GWTUser> response) {
setUsers(response);
}
});
}
private void setUsers(List<GWTUser> users) {
this.users = users;
}
private List<GWTUser> getUsers() {
return this.users;
}
Rest调用基本上有效,因为我可以在开发模式(Eclipse)中看到响应,但是当我尝试调试此过程时,MethodCallback
超越了我的用户列表总是空的。我不确定问题出在哪里,好像它与何时调用fetchUsers
方法有关。或者它的运行时或编译时取决于,不确定。谢谢你的帮助。
答案 0 :(得分:1)
以下代码
if (getUsers() == null) {
setUsers(new ArrayList<GWTUser>());
}
立即执行 - 在您的服务有机会收到回复之前。您需要在回调中的onSuccess方法中移动此代码:
if (response == null) {
setUsers(new ArrayList<GWTUser>());
} else {
setUsets(response);
}
答案 1 :(得分:0)
通过在响应意义
之后将arraylist设置为视图来解决问题@Override
public void start(AcceptsOneWidget panel, EventBus eventBus) {
view.setPresenter(this);
fetchUsers();
panel.setWidget(view.asWidget());
}
@Override
public void onSuccess(Method method, List<GWTUser> response) {
view.setUserList(response);
}
因此,实际用户列表仅在响应后设置。