根据 firebase 文档:
onChildAdded(DataSnapshot snapshot, String previousChildName) 当一个新的孩子被添加到这个监听器被添加到的位置时,这个方法被触发。
但是根据我在 Logcat 中收到的输出(通过我的方法 logresult()
),即使我没有添加孩子,我也可以得出结论 onChildAdded 被触发。它在我的节点“捕获”中为每个孩子触发
她是我的代码
private void startMonitoring(){
paused=false;
resetgraph();
now = System.currentTimeMillis()/1000;
starting = System.currentTimeMillis()/1000;
starting = starting - starting%3600;
//logresult(new Date(starting*1000).toString()+" "+new Date((starting+3600)*1000).toString());
select_part(starting,starting+3600);
if(listener!=null){
captures.removeEventListener(listener);
}
listener = new ChildEventListener() {
@Override
public void onChildAdded(@NonNull DataSnapshot snapshot, @Nullable String previousChildName) {
long timex = snapshot.child("date_captured").getValue(Long.class);
starting = timex - (timex % 3600);
logresult(new Date(starting*1000).toString()+" "+new Date((starting+3600)*1000).toString());
if ((timex%3600>1)&&(!paused)){
addentries(timex, snapshot.child("node1").getValue(dataTemplate.class));
}else if(!paused){
resetgraph();
select_part(starting,starting+3600);
}
if(paused){
captures.removeEventListener(this);
}
}
@Override
public void onChildChanged(@NonNull DataSnapshot snapshot, @Nullable String previousChildName) {
}
@Override
public void onChildRemoved(@NonNull DataSnapshot snapshot) {
}
@Override
public void onChildMoved(@NonNull DataSnapshot snapshot, @Nullable String previousChildName) {
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
};
captures.addChildEventListener(listener);
}
那么我在代码中遗漏了什么或做错了什么? 我还仔细检查了我是否将孩子添加到我的捕获节点,但没有
答案 0 :(得分:0)
onChildAdded
在您添加侦听器时为每个子节点触发,只有在添加其他子节点时才会触发。所以你看到的是预期的行为。
另请参阅 listening for child events 上的文档,其中介绍了 onChildAdded
:
检索项目列表或监听项目列表的添加。 此回调为每个现有子项触发一次,然后在每次将新子项添加到指定路径时再次触发。传递给侦听器的 DataSnapshot 包含新孩子的数据。