Firebase child_added只能添加子项

从Firebase API:

添加小孩:这个位置的每个初始小孩都会触发一次该事件,每次添加一个新小孩时都会再次触发。

一些代码:

listRef.on('child_added', function(childSnapshot, prevChildName) { // do something with the child }); 

但是由于该函数在这个位置被调用一次,有没有办法只得到实际添加的孩子?

要追踪从某个检查点以来添加的事物而不提取以前的logging,可以使用endAt()limit()来获取最后一条logging:

 // retrieve the last record from `ref` ref.endAt().limit(1).on('child_added', function(snapshot) { // all records after the last continue to invoke this function console.log(snapshot.name(), snapshot.val()); }); 

limit()方法已被弃用。 limitToLast()limitToFirst()方法将其replace。

 // retrieve the last record from `ref` ref.limitToLast(1).on('child_added', function(snapshot) { // all records after the last continue to invoke this function console.log(snapshot.name(), snapshot.val()); // get the last inserted key console.log(snapshot.key()); }); 

对我来说,逻辑就是要有价值 – 例如“地位” – 在决定是新的还是旧的logging之前需要validation,然后将“状态”设置为不同的值,所以我没有下一次:

 @Override public void onChildAdded(DataSnapshot dataSnapshot, String previousChildKey) { if(dataSnapshot.hasChildren()) { String Id = (String) dataSnapshot.child("user_id").getValue(); String status = (String) dataSnapshot.child("status").getValue(); if (Id != null && Id.equals(storedId) && status != null && status.equals("created")) { Log.d("INCOMING_REQUEST", "This is for you!"); sessionsRef.child(dataSnapshot.getKey()).child("status").setValue("received"); } } } 

Swift3解决scheme:

您可以通过以下代码检索您以前的数据:

  queryRef?.observeSingleEvent(of: .value, with: { (snapshot) in //Your code }) 

然后通过下面的代码观察新的数据。

 queryRef?.queryLimited(toLast: 1).observe(.childAdded, with: { (snapshot) in //Your Code }) 

我尝试了其他的答案,但至less为最后一个孩子调用了一次。 如果你的数据有时间键,你可以这样做。

 ref.orderByChild('createdAt').startAt(Date.now()).on('child_added', ...