我正在使用Firebase addValueEventListener从firebase数据库中获取数据,下面是我的代码。
DatabaseReference chatMessagesDb = FirebaseDatabase.getInstance().getReference("ChatRooms");
DatabaseReference usersDb = FirebaseDatabase.getInstance().getReference("users");
chatMessagesDb.child(chatRoomId).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot messages : dataSnapshot.getChildren()) {
Message message = messages.getValue(Message.class); // Message is a data Model for chatMessages.
userDb.child(message.getCreatorId()).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
我在chatMessagesDb上应用addValueEventListener
并提供密钥chatRoomId,因此它将从chatRoom的数据库中获取所有消息,其id等于chatRoomId。现在,对于我想要获取消息创建者的每条消息,我在用户数据库中添加addValueEventListener
以获取消息创建者的详细信息。
对于Message的第一个循环,它应该工作,它应该在用户db上为该消息的创建者调用addValueEventListener
,但它不会像这样工作。首先,它遍历所有消息,然后开始在用户db上调用addValueEventListener
。
我该如何解决?如果有人对此有所了解,请告诉我,这将是一个很大的帮助。
非常感谢先进。
答案 0 :(得分:0)
我认为答案来得不迟,但我认为其他正在学习的人会有所帮助。如果有来自数据库的消息,请使用ChildValueEventListener
。它返回4种实现方法,因此将侦听特定节点的db中的任何更改并返回该值。