首页 > 解决方案 > 改造 - GET 后的空对象

问题描述

我想从数据库中获取所有用户并通过登录列表查找用户。我总是得到信息,我的实际用户为空。我也尝试显示 Log.d("msg", usr.getLogin()) 但这是同样的问题。

我有:

private List<User> users = new ArrayList<>();
private User actualUser;

//Init API
Retrofit retrofit = RetrofitClient.getInstance();
restAPI = retrofit.create(RESTAPInterface.class);

newDeviceAcceptButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                //get user info
                getAllUsers();
                for(User usr: users){
                    if(UserCredentials.getInstance().getUsername().equals(usr.getLogin())) {
                        actualUser = new User(usr.getId(), usr.getLogin(), usr.getPassword());
                        Log.d("mojlogin", actualUser.getLogin());
                        break;
                    }
                }

public void getAllUsers(){
        compositeDisposable.add(restAPI.getUsers("Bearer " + TokenHolder.getInstance().getToken())
        .subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe(new Consumer<List<User>>() {
            @Override
            public void accept(List<User> users) throws Exception {
                initializeUsers(users);
            }
        }));
    }

public void initializeUsers(List<User> users){ this.users = users; }

标签: javaandroidgetretrofit

解决方案


我认为您必须在 getAllUsers 中调用 initializeUsers 方法后获取实际用户。

喜欢,

public void getAllUsers(){
    compositeDisposable.add(restAPI.getUsers("Bearer " + TokenHolder.getInstance().getToken())
    .subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe(new Consumer<List<User>>() {
        @Override
        public void accept(List<User> users) throws Exception {
            Log.d("TAG", "users=>"+users.size());
            initializeUsers(users);
            for(User usr: users){
                if(UserCredentials.getInstance().getUsername().equals(usr.getLogin())) {
                    actualUser = new User(usr.getId(), usr.getLogin(), usr.getPassword());
                    Log.d("mojlogin", actualUser.getLogin());
                    break;
                }
            }
        }
    }));
}

推荐阅读