首页 > 解决方案 > Firebase onchildadded() 在列表视图中返回相同的数据 3 次

问题描述

我的问题与标题相同,firebase onchildadded() 在 listview 中返回相同的数据 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) {

        }
    });
}

标签: androidfirebasefirebase-realtime-database

解决方案


所以你不应该使用 achildEventListener因为它会在父节点的任何子节点发生变化时触发。

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

所以你应该专注于在你现在使用的同一个引用上使用 asingleValueEventListener或 a 。valueEventListener

在此处阅读有关childEventListeners 的更多信息。

在此处了解有关在 Firebase 上阅读和写作的更多信息。


推荐阅读