android - 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) {
}
});
}
解决方案
所以你不应该使用 achildEventListener
因为它会在父节点的任何子节点发生变化时触发。
您可以检查是否正在更新childEventListener
设置您的父节点的其他子节点以及其他子节点。一定是这样,因为它会发射 3 次。
所以你应该专注于在你现在使用的同一个引用上使用 asingleValueEventListener
或 a 。valueEventListener
在此处阅读有关childEventListeners 的更多信息。
在此处了解有关在 Firebase 上阅读和写作的更多信息。
推荐阅读
- javascript - 为什么在 asp.net mvc 中加载模型很慢?
- java - 在 Spring Boot 中使用环境变量
- actions-on-google - 具有相同命令的设备
- javascript - CSS 样式不适用于 React 标题和段落
- linux - 如何获得 CPU 指令序列的准确性能配置文件?
- python - 扩展 ast.AST
- azure - CosmosDB 重音(变音符号)不敏感查询
- terraform - 从部分名称中查找 Terraform AWS IAM 策略数据源
- angular - spring boot和angular中的正则表达式
- python - django 注册表单不存储用户名