Чтобы получить идентификаторы этих пользователей, используйте следующий код:
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference usersRef = rootRef.child("users");
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot ds : dataSnapshot.getChildren()) {
String uid = ds.getKey();
Log.d("TAG", uid);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {}
};
usersRef.addListenerForSingleValueEvent(valueEventListener);
Вывод будет:
5Aoz6ZaB9QS7o9M4lsdbh07VGA02
// the other ids
Когда вы присоединяете слушателя к определенному узлу, вы получаете все данные под этим узлом. Вот как работает база данных Firebase Realtime, и, к сожалению, это поведение нельзя изменить. Но есть обходной путь, в котором вы можете создать еще один отдельный узел, в который вы можете добавить все эти идентификаторы отдельно. Новый узел должен выглядеть примерно так:
Firebase-root
|
--- userIds
|
--- 5Aoz6ZaB9QS7o9M4lsdbh07VGA02: true
|
--- //other ids
В этом случае, если вы присоедините слушателя к узлу userIds
, вы получите только нужные данные и ничего более. Код для получения этих идентификаторов аналогичен приведенному выше коду, но вместо использования .child("users")
необходимо использовать .child("userIds")
. Вывод будет таким же.
Если вам нужно другое поведение, вы можете рассмотреть возможность использования Cloud Firestore , где это поведение больше не является проблемой.