Firebase onchildadded()在列表视图中返回3次相同的数据

时间:2018-12-03 11:36:47

标签: android firebase firebase-realtime-database

我的问题与标题相同,firebase onchildadded()在列表视图中返回了3次相同的数据。我尝试了很多事情,但仍然找不到解决方法。

我的代码在那里;

public void ReceiveMessages(){
     childEventListener = message_dbref.child(user_id).child(user2_id).addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String s) {
            Message message = dataSnapshot.getValue(Message.class);

            message_dbref.removeEventListener(childEventListener);
            user_dbref.removeEventListener(valueEventListener);
            messageArrayList.add(message);
            messageAdapter.notifyDataSetChanged();

        }

        @Override
        public void onChildChanged(DataSnapshot dataSnapshot, String s) {

        }

        @Override
        public void onChildRemoved(DataSnapshot dataSnapshot) {

        }

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

        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });
}

1 个答案:

答案 0 :(得分:0)

因此,您不应该使用childEventListener,因为只要父节点的任何子节点发生更改,它就会触发。

您可以检查是否正在更新设置了childEventListener的父节点的其他子节点以及其他节点。肯定是这样,它可以发射3次。

因此,您应该专注于在当前使用的同一引用上使用singleValueEventListenervalueEventListener

详细了解childEventListeners here.

进一步了解reading and writing on Firebase here.