Android 从firebase的2个表中获取列表数据
好的,我有这样的数据结构 评论活动:{Android 从firebase的2个表中获取列表数据,android,firebase-realtime-database,Android,Firebase Realtime Database,好的,我有这样的数据结构 评论活动:{ 事件1:{ 0:{ 用户:1 } 1:{ 用户:3 } } 事件2:{ 0:{ 用户:2 } 1:{ 用户:3 } } } 用户:{ 1:{ 姓名:詹姆斯 } 2:{ 姓名:金 } 3:{ 姓名:露娜 } } 我想根据Event1的注释获得一个名称列表,我尝试编写代码 List<String> name = new ArrayList<>(); String eventID = 1; DatabaseRefere
- 事件1:{
- 0:{ 用户:1 }
- 1:{ 用户:3 }
- 事件2:{
- 0:{ 用户:2 }
- 1:{ 用户:3 }
- 1:{ 姓名:詹姆斯 }
- 2:{ 姓名:金 }
- 3:{ 姓名:露娜 } }
List<String> name = new ArrayList<>();
String eventID = 1;
DatabaseReference firebaseDatabase = FirebaseDatabase.getInstance().getReference();
firebaseDatabase.child("CommentEvent/Event"+eventID).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
for (DataSnapshot item : snapshot.getChildren()){
String uID = String.valueOf(item.child("User").getValue());
firebaseDatabase.child("User").child(uID).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
name.add(String.valueOf(snapshot.child("Name").getValue()));
// I check here the list 'name' is still fine, The size of 'name' is increased
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
}
}
// But here i check again. The size of 'name' is still 0
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
List name=new ArrayList();
字符串eventID=1;
DatabaseReference firebaseDatabase=firebaseDatabase.getInstance().getReference();
firebaseDatabase.child(“CommentEvent/Event”+eventID).addValueEventListener(新的ValueEventListener(){
@凌驾
public void onDataChange(@NonNull DataSnapshot snapshot snapshot){
对于(DataSnapshot项:snapshot.getChildren()){
String uID=String.valueOf(item.child(“用户”).getValue());
firebaseDatabase.child(“用户”).child(uID).addValueEventListener(新的ValueEventListener()){
@凌驾
public void onDataChange(@NonNull DataSnapshot snapshot snapshot){
name.add(String.valueOf(snapshot.child(“name”).getValue());
//我在这里检查列表“name”仍然很好,“name”的大小增加了
}
@凌驾
已取消公共void(@NonNull DatabaseError){
}
});
}
}
//但我在这里再次检查。“name”的大小仍然是0
@凌驾
已取消公共void(@NonNull DatabaseError){
}
});
我的问题在于代码中的注释//处。
有人帮忙吗?您看到的是预期的行为。数据是从Firebase(和大多数云API)异步加载的,这可能需要一些时间。加载数据时,主/包含代码将继续执行,以便用户可以继续使用应用程序。然后,当数据可用时,您的
onDataChange
将与数据一起调用。这在实践中意味着,任何需要数据的代码都需要位于该数据的onDataChange
内部,或者从那里调用。看见