Я хочу получить всех пользователей из базы данных и найти пользователя по логину в списке. Я всегда получаю информацию о том, что мой фактический пользователь равен нулю. Я пытаюсь также показать 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; }




Я думаю, вам нужно получить реального пользователя после вызова метода 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 (). Проблема в том, что фактический пользователь возвращает значение null из-за получения сведений о фактическом пользователе до получения ответа. Так что вам нужно проверить фактического пользователя после получения ответа.
После использования initializeUsers () я пытаюсь отобразить свой список пользователей в Log.d в методе onClick. Это тоже ноль.
Можете ли вы зарегистрировать размер пользователей перед методом initializeUsers? Если размер пользователей равен 0 или пользователи возвращают в ответ null, сначала исправьте вызов API.
Я обновляю ответ с помощью журнала. Пожалуйста, проверьте, получаете ли вы размер списка пользователей или нет после вызова API.
В методе public void accept(List<User> users) мой Object actualUser все в порядке. Но когда я пытаюсь использовать эту нижнюю часть actualUser в методе onClick после использования getAllUsers (), мой объект actualUser имеет значение null.
Вы получаете нулевой объект actualUser, потому что фактический цикл пользователя выполняется до получения ответа от getAllUsers ().
Вы назначаете список пользователей в методе initializeUsers после получения ответа. Так что actualUser будет работать после initializeUsers. Если вы попытаетесь получить ActualUser после getAllUsers () по щелчку, он вернет null. Поскольку фактический пользователь вызывается до получения ответа, а список пользователей равен нулю.
Почему я не могу инициализировать список пользователей с помощью метода initializeUsers ()?