Firebase中UserID下的UID如何统计?
How can I count the UID under the UserID in Firebase?
只算红标,我要的是黑标
Link for the image
如何检索数据?
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) {
}
});
it only counts the red mark, what I needed is the black mark
这是预期的行为,因为您只循环访问数据一次。调用.child(userID)
会一直统计用户ID节点下children的个数。要计算所有用户的所有children,您需要添加一个嵌套循环,如以下代码行:
DatabaseReference db = FirebaseDatabase.getInstance().getReference();
DatabaseReference babylistRef = db.child("babylist");
babylistRef.get().addOnCompleteListener(new OnCompleteListener<DataSnapshot>() {
@Override
public void onComplete(@NonNull Task<DataSnapshot> 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!
}
}
});
只算红标,我要的是黑标
Link for the image
如何检索数据?
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) {
}
});
it only counts the red mark, what I needed is the black mark
这是预期的行为,因为您只循环访问数据一次。调用.child(userID)
会一直统计用户ID节点下children的个数。要计算所有用户的所有children,您需要添加一个嵌套循环,如以下代码行:
DatabaseReference db = FirebaseDatabase.getInstance().getReference();
DatabaseReference babylistRef = db.child("babylist");
babylistRef.get().addOnCompleteListener(new OnCompleteListener<DataSnapshot>() {
@Override
public void onComplete(@NonNull Task<DataSnapshot> 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!
}
}
});