# #java #android #firebase #firebase-realtime-database #google-cloud-platform
Вопрос:
Это учитывает только красную метку, то, что мне нужно, — это черная метка.
Как мне получить эти данные?
String userID = FirebaseAuth.getInstance().getUid(); public static final String TAG = "TAG"; DatabaseReference db = FirebaseDatabase.getInstance().getReference().child("babylist").child(userID); db.addListenerForSingleValueEvent(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { int counter = (int) dataSnapshot.getChildrenCount(); String userCounter = String.valueOf(counter); babycount.setText(userCounter); usercount.setText(userCounter); } @Override public void onCancelled(DatabaseError databaseError) { } });
Ответ №1:
это учитывает только красную метку, то, что мне нужно, — это черная метка
Это ожидаемое поведение, поскольку вы просматриваете данные только один раз. При вызове .child(userID)
всегда будет учитываться количество дочерних элементов в узле идентификатора пользователя. Чтобы подсчитать всех потомков всех пользователей, вам нужно добавить вложенный цикл, как в следующих строках кода:
DatabaseReference db = FirebaseDatabase.getInstance().getReference(); DatabaseReference babylistRef = db.child("babylist"); babylistRef.get().addOnCompleteListener(new OnCompleteListenerlt;DataSnapshotgt;() { @Override public void onComplete(@NonNull Tasklt;DataSnapshotgt; task) { if (task.isSuccessful()) { int userCounter = 0; for (DataSnapshot userSnapshot : task.getResult().getChildren()) { for (DataSnapshot snapshot : userSnapshot.getChildren()) { userCounter ; } } babycount.setText(userCounter); usercount.setText(userCounter); } else { Log.d("TAG", task.getException().getMessage()); //Don't ignore potential errors! } } });