Android Firebase:onChildAdded在setValue之后仅调用delta

时间:2018-03-13 21:02:09

标签: android firebase firebase-realtime-database

在我的聊天应用中,当在FcmService中收到消息通知时,会为该msgId设置deliveryReceipt。

这是我在收到该消息的通知时更新消息对象的特定字段的方式。

FirebaseDatabase.getInstance().getReference("messages/groups")
            .child(groupId)
            .child("-L7VySOmgmcePMVokcVj") //messageId
            .child("deliveryReceipts")
            .child(FirebaseAuth.getInstance().getUid())
            .setValue(System.currentTimeMillis());

使用新字段" deliveryReceipts "

成功更新邮件

enter image description here

现在,当我打开聊天本身,同步所有聊天消息时,onChildAdded()的最后一次迭代仅使用我之前明确更新的字段触发,即" deliveryReceipts "

FirebaseDatabase.getInstance().getReference("messages/groups")
            .child(groupId)
            .addChildEventListener(new ChildEventListener() {
                @Override
                public void onChildAdded(DataSnapshot dataSnapshot, String s) {
                    final ChatData chatData = dataSnapshot.getValue(ChatData.class);
                    if (chatData != null) {
                        Log.d(TAG, "onChildAdded: " + dataSnapshot);
                    }
                }

Firebase过滤日志的方式如下:

  

CHILD_ADDED:{-L7W43o02tkhToxee5dQ:{deliveryReceipts = {KS3lGdZkByQI3QTASUuhozfTUB12 = 1520973407769},serverTimestamp = 1520973403735,authorUid = BjqACatBjUSm2kFeEEeUjL7NsCC3,createdTimestamp = 1520973403883,lubbCount = 0,消息= H ICICI}}

     

CHILD_ADDED:{ - L7W8HtvWnRix1WMpB0Z:   {deliveryReceipts = {KS3lGdZkByQI3QTASUuhozfTUB12 = 1520974512436}}}

最后一条消息只有" deliveryReceipts "这是客户为该邮件设置的新字段,缺少authorUidcreatedTimestamp等旧字段。

正如您在日志中看到的那样。 onChildAdded()中返回的先前消息很好。只有最近更新的最后一条消息被破坏。

我无法弄清楚为什么只使用我之前更新的字段调用onChildAdded,而没有所有其他字段。

更新:来自onChildAdded

的捕获数据快照
DataSnapshot { key = -L7iEsm4WqF20CbSuAhP, value = {deliveryReceipts={KS3lGdZkByQI3QTASUuhozfTUB12=1521194344681}} }

更新2 以下是打印dataSnapshot本身时的日志,如上面onChildAdded()的更新代码

D/ChatFragment: onChildAdded: DataSnapshot { key = -L7nmHBXJsLG-PFTF5wm, value = {deliveryReceipts={KS3lGdZkByQI3QTASUuhozfTUB12=1521287243021}} }

更新3 :测试项目的复制方案。这是Github回购:https://github.com/ishaangarg/FireWrite

如何复制:回购中列出的步骤

0 个答案:

没有答案