【发布时间】:2020-12-31 15:34:15
【问题描述】:
在 Firebase 中,我有一个“usuario”节点,其中包含每个注册用户的数据。我想检索用户朋友的 ID,并通过这些 ID 在 Recycler 中显示查看每个朋友的数据(标识符、姓名和照片地址)。
我在 Firebase 中的结构:
我试过这段代码,但它不起作用。列表为空:
ref = ConfigFirebase.getFirebaseDatabase().child("usuarios"); //code in OnCreate
//My method
ref = ref.child(idUserLog).child("friends");
ref.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot idFriends: dataSnapshot.getChildren()){
DataUserFriend dataUserFriend = idFriends.getValue(DataUserFriend.class);
String id = dataUserFriend.getIdUser();
ref.child(id).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
DataUser dataUser = dataSnapshot.getValue(DataUser.class);
listFriends.add(dataUser);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
}
listFriendsAdapter.notifyDataSetChanged();
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
怎么了?还是我应该尝试其他方式?
解决方案:
ref = ConfigFirebase.getFirebaseDatabase().child("usuarios"); //code in OnCreate
//My method
ref = ref.child(idUserLog).child("friends");
ref.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
final int numFriends = (int) dataSnapshot.getChildrenCount();
if(numFriends != 0){
for (DataSnapshot idFriends: dataSnapshot.getChildren()){
DataUserFriend dataUserFriend = idFriends.getValue(DataUserFriend.class);
String id = dataUserFriend.getIdUser();
ref = ConfigFirebase.getFirebaseDatabase().child("usuarios").child(id);
ref.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
DataUser dataUser = dataSnapshot.getValue(DataUser.class);
listFriends.add(dataUser);
if(listFriends.size() == numFriends){
listFriendsAdapter.notifyDataSetChanged();
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
【问题讨论】:
-
请仅使用
android-studio标签来回答有关 Android Studio IDE 本身的问题。对于一般的 Android 编程问题,请使用android标签。
标签: android firebase firebase-realtime-database