Firebase addValueEventListener稍后在循环

时间:2017-03-29 07:43:22

标签: android firebase firebase-realtime-database

我正在使用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

我该如何解决?如果有人对此有所了解,请告诉我,这将是一个很大的帮助。

非常感谢先进。

1 个答案:

答案 0 :(得分:0)

我认为答案来得不迟,但我认为其他正在学习的人会有所帮助。如果有来自数据库的消息,请使用ChildValueEventListener。它返回4种实现方法,因此将侦听特定节点的db中的任何更改并返回该值。