用于Firebase数据更新的setValue()导致更新对象中的其他字段在childEventListener中的onChildAdded中返回null

时间:2018-08-12 11:25:58

标签: android firebase firebase-realtime-database event-listener children

我有一个Firebase消息对象列表,每个对象都可以在打开活动之前进行更新,此时将触发Firebase ChildEventListener()(在onChildAdded()中处理子对象)。

此更新在setValue()字段上使用了status

database.getReference("Messages").child(roomID).child(msgID).child("status").setValue("delivered");

enter image description here

打开活动后,ChildEventListener()将对所有孩子罚款。但是,对于事先状态已更新的那些孩子(消息),他们为null字段以外的所有字段返回status。 在Firebase数据库中,所有字段均应保留(非空),因此数据没有任何问题。 退出活动并重新进入后,所有子项都按原样返回ChildEventListener()中(不再返回任何空数据)。

简而言之,在对该子节点运行ChildEventListener()之后,需要两次setValue()调用才能返回该子节点的所有数据。

如果需要,可以提供更多代码和上下文。让我知道。

编辑1::这是侦听器:(位于onResume()中)

newMessageListner = myMessageRoomRef.addChildEventListener(new ChildEventListener() {

            @Override
            public void onChildAdded(@NonNull DataSnapshot dataSnapshot, String previousChildName) {

                if (dataSnapshot.exists()) {


                    String messageKey = dataSnapshot.getKey();
                    Message messageClass = dataSnapshot.getValue(Message.class);
                    String messageUserID = messageClass.getUserId();

                        Log.d(TAG, "Message Key: " + messageKey);
                        Log.d(TAG, "Message Status: " + messageClass.getStatus());
                        Log.d(TAG, "Message User ID: " + messageUserID);

}

            @Override
            public void onChildRemoved(DataSnapshot dataSnapshot) {}

            @Override
            public void onChildMoved(DataSnapshot dataSnapshot, String previousChildName) {}

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });

编辑2:我在getValue()的{​​{1}}中呼叫sendNotification()

FirebaseMessagingService

0 个答案:

没有答案