Модернизация - нулевой объект после 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; }
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
47
1

Ответы 1

Я думаю, вам нужно получить реального пользователя после вызова метода initializeUsers в getAllUsers.

нравиться,

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

Почему я не могу инициализировать список пользователей с помощью метода initializeUsers ()?

Bartosz20188 05.06.2018 12:36

Вы можете инициализировать список пользователей с помощью метода initializeUsers (). Проблема в том, что фактический пользователь возвращает значение null из-за получения сведений о фактическом пользователе до получения ответа. Так что вам нужно проверить фактического пользователя после получения ответа.

Reshma Dhaduk 05.06.2018 12:55

После использования initializeUsers () я пытаюсь отобразить свой список пользователей в Log.d в методе onClick. Это тоже ноль.

Bartosz20188 05.06.2018 13:08

Можете ли вы зарегистрировать размер пользователей перед методом initializeUsers? Если размер пользователей равен 0 или пользователи возвращают в ответ null, сначала исправьте вызов API.

Reshma Dhaduk 05.06.2018 13:17

Я обновляю ответ с помощью журнала. Пожалуйста, проверьте, получаете ли вы размер списка пользователей или нет после вызова API.

Reshma Dhaduk 05.06.2018 13:19

В методе public void accept(List<User> users) мой Object actualUser все в порядке. Но когда я пытаюсь использовать эту нижнюю часть actualUser в методе onClick после использования getAllUsers (), мой объект actualUser имеет значение null.

Bartosz20188 06.06.2018 19:30

Вы получаете нулевой объект actualUser, потому что фактический цикл пользователя выполняется до получения ответа от getAllUsers ().

Reshma Dhaduk 08.06.2018 13:09

Вы назначаете список пользователей в методе initializeUsers после получения ответа. Так что actualUser будет работать после initializeUsers. Если вы попытаетесь получить ActualUser после getAllUsers () по щелчку, он вернет null. Поскольку фактический пользователь вызывается до получения ответа, а список пользователей равен нулю.

Reshma Dhaduk 08.06.2018 13:15

Другие вопросы по теме