我的问题与标题相同,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) {
}
});
}
答案 0 :(得分:0)
因此,您不应该使用childEventListener
,因为只要父节点的任何子节点发生更改,它就会触发。
您可以检查是否正在更新设置了childEventListener
的父节点的其他子节点以及其他节点。肯定是这样,它可以发射3次。
因此,您应该专注于在当前使用的同一引用上使用singleValueEventListener
或valueEventListener
。