为什么这个ChildEventListener没有从firebase节点读取数据?

时间:2017-09-27 12:30:31

标签: firebase firebase-realtime-database kotlin

我对图像链接中显示的ChildEventListener的firebase节点进行了查询 enter image description here

现在我运行此代码

mMessageRef.child(ScrollAppUtils.firebaseId).child(child.key).orderByKey().limitToLast(1).addChildEventListener(object : ChildEventListener {

    override fun onCancelled(p0: DatabaseError?) {}

    override fun onChildMoved(p0: DataSnapshot?, p1: String?) {}

    override fun onChildChanged(p0: DataSnapshot?, p1: String?) {}

    override fun onChildAdded(p0: DataSnapshot?, p1: String?) {

        Logger.d("inside onChild Added")
        if (p0!!.hasChildren())
        {

        var lastMessage = p0.getValue(MessagesTwo::class.java)
        var dialog = DefaultDialog(child.key, user.metaData.profileImage, user.metaData.name, arrayListUser, lastMessage, 2)
        if (!listDialog.contains(dialog)) {

            listDialog.add(dialog)
            Logger.d(listDialog.size)
            dialogListAdapter.setItems(listDialog)
            dialogListAdapter.notifyDataSetChanged()
        } else {
            Logger.d("inside updateItemByID : ")
            Logger.json(Gson().toJson(dialog))
            dialogListAdapter.updateItemById(dialog)
            dialogListAdapter.notifyDataSetChanged()
        }
        }


    }

    override fun onChildRemoved(p0: DataSnapshot?) {}
    })

当找不到节点时,这个监听器根本不起作用,我认为应该可以正常工作,因为ValueEventListener工作得非常好但是我对该监听器有一些其他问题所以我被迫使用这个监听器。请告诉我这里我做错了什么?

1 个答案:

答案 0 :(得分:2)

为每个不属于该位置(或查询)的子项调用onChildAdded方法。如果没有匹配的子节点,则不会调用onChildAdded

如果您想检测没有子节点的情况,您还需要使用ValueEventListener

另见: