【问题标题】:Why this ChildEventListener is not reading data from firebase node?为什么这个 ChildEventListener 没有从 firebase 节点读取数据?
【发布时间】:2018-03-08 22:39:14
【问题描述】:

我使用图片链接中显示的 ChildEventListener 对 firebase 节点进行了查询

现在当我运行这段代码时

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 工作得很好,但是该侦听器还有其他问题,所以我不得不使用它听众。请告诉我我在这里做错了什么?

【问题讨论】:

    标签: firebase firebase-realtime-database kotlin


    【解决方案1】:

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

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

    另见:

    【讨论】:

    • 感谢您的回复。我现在正在使用 ValueEventListener
    【解决方案2】:

    这是一个java代码,但你可以理解

     ValueEventListener listener = new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot snapshot) {
            if (snapshot.hasChildren()) {
                Toast.makeText(getApplicationContext(), "hasChildren ", Toast.LENGTH_SHORT).show();
                getDesigns();
            }
            else {
                Toast.makeText(getApplicationContext(), "No Data", Toast.LENGTH_SHORT).show();
                loadingPB.setVisibility(View.GONE);
            }
        }
        @Override
        public void onCancelled(@NonNull DatabaseError error) {
    
        }
    };
    databaseReference.addListenerForSingleValueEvent(listener);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-03
      • 2015-03-18
      • 1970-01-01
      • 1970-01-01
      • 2022-06-12
      • 1970-01-01
      • 2023-02-13
      • 2021-11-26
      相关资源
      最近更新 更多