В вашем коде есть две основные проблемы.
Когда вы используете ссылку user
, которая определяется как:
private DatabaseReference user = db.getReference("Users");
И прикрепите к нему слушателя, при циклическом прохождении объекта snapshot
с помощью метода getChildren () вы не получаете объекты SearchedUser, как вы ожидали, и это потому, что прямой дочерний элемент dataSnapshot
является дочерним элементом введите String с именем UserDetails, а не объект SearchedUser. Чтобы получить эти SearchedUser
объекты, необходим вызов .child("UserDetails")
, как показано в следующих строках кода:
user.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
for (DataSnapshot dataSnapshot : snapshot.getChildren()){
mSearchedUser.add(dataSnapshot.child("UserDetails").getValue(SearchedUser.class));
// ^^^^^^^^^^^^^^^^^^^^^
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
Log.d("myDebug", "onCancelled: ");
}
});
Чтобы иметь возможность получить эти объекты SearchedUser, имя свойств в вашем классе должно совпадать с именем свойств в базе данных. Видите ли, у вас есть поле с именем
mUserEmail
в вашем классе SearchedUser, а в базе данных -
userEmail
, и это
не правильно. Чтобы решить эту проблему, вы можете просто изменить имя всех свойств в своем классе, чтобы оно соответствовало имени в базе данных.
Также не забудьте переместить следующую строку кода:
mSearchedUsersMutableLiveData.setValue(mSearchedUser);
Сразу после окончания цикла for:
for (DataSnapshot dataSnapshot : snapshot.getChildren()){
mSearchedUser.add(dataSnapshot.getValue(SearchedUser.class));
}
mSearchedUsersMutableLiveData.setValue(mSearchedUser);