从Firebase检索用户id下的数据



我正在尝试检索所有userid下的数据。我尝试了这里的建议,见下面我的代码:

final DatabaseReference ratingRef = FirebaseDatabase.getInstance().getReference("Customer");
ratingRef.child(RandomID).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
for(DataSnapshot ds : snapshot.getChildren()) {
for (DataSnapshot dataSnapshot : ds.child("rating").getChildren()) {
if (ds != null){
Toast.makeText(RibsAndPowerboats.this, "It is: "+ds.child("rating").getValue(), Toast.LENGTH_SHORT).show();
}
}
}

但是这样它显示的是NaN而不是应该显示的数字。我的Firebase数据库如下:

"Customer" : {
"Xqve54QUwwPo3NyZhcs2z4wkETB2" : {
"3086181c-c391-4bab-a022-0a0e0bb2624c" : {
"rating" : 4.5,
"review" : "γγυηωυηη"
},
"Name" : "Ntinakos",
"Password" : "123456789"
},
"mW5TtA3GxjNaaj3lAFcAFF3moQ22" : {
"Name" : "Αχιλλέας",
"Password" : "Achisyg_15"
}
}

那么,是否有另一种方法来检索所有userid下的数据?

要获得每个客户下存在的评级值,需要循环两次DataSnapshot对象。所以请尝试下面的代码行:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference customerRef = rootRef.child("Customer");
customerRef.get().addOnCompleteListener(new OnCompleteListener<DataSnapshot>() {
@Override
public void onComplete(@NonNull Task<DataSnapshot> task) {
if (task.isSuccessful()) {
DataSnapshot dataSnapshot = task.getResult();
if (dataSnapshot != null) {
for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
if (snapshot != null) {
for (DataSnapshot ds : snapshot.getChildren()) {
Double rating = ds.child("rating").getValue(Double.class);
if (rating != null) {
Log.d(TAG, "rating: " + rating);
}
}
}
}
}
} else {
Log.d(TAG, task.getException().getMessage()); //Don't ignore potential errors!
}
}
});

日志的结果将是:

rating: 4.5