Activity中的GWT Rest回调始终为空/ null

时间:2014-04-15 14:45:15

标签: java google-app-engine rest gwt mvp

首先,我想说我不确定它是否是将回调实现到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方法有关。或者它的运行时或编译时取决于,不确定。谢谢你的帮助。

2 个答案:

答案 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);
        }

因此,实际用户列表仅在响应后设置。