【发布时间】:2016-09-08 12:04:07
【问题描述】:
我试图了解这两者之间的关系。来自文档:
onChildAdded 事件会为每个现有的孩子触发一次,然后在每次将新的孩子添加到指定路径时再次触发。侦听器被传递一个包含新孩子数据的快照。
还有:
onChildRemoved 事件在删除直接子项时触发。它通常与 onChildAdded 和 onChildChanged 事件结合使用。传递给事件回调的快照包含已删除子项的数据。
所以技术上我期望这两个事件根据它们的角色分别触发:也就是说,onChildAdded 将在我添加新数据时触发,而onChildRemoved 是当我从@987654326 中删除child 时@。
但是,当我添加数据时,这是我记录的内容:
14:47:39.649 31305-31305/com.myapp D/addData_: onChildRemoved called
14:47:39.649 31305-31305/com.myapp D/addData_: onChildAdded called
onChildRemoved 在onChildAdded 之前首先被调用!!更糟糕的是数据从我的listview 中消失了。有人帮助我了解我做错了什么。
还有我的火力基地参考:
ref = FirebaseDatabase.getInstance().getReference().child("sales/" + getId() + "/" + getDateTime());
//limit to the last data
final Query lastSale = ref.limitToLast(1);
//add on child event listener
lastSale.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String previousChildName) {
//get the data from firebase and add it to our model
MyModel model = dataSnapshot.getValue(MyModel.class);
String firebase_key = dataSnapshot.getKey();
Log.d("addData_", "onChildAdded called");
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
Log.d("addData_", "onChildChanged called");
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
Log.d("addData_", "onChildRemoved called");
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
Log.d("addData_", "onChildMoved called");
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
【问题讨论】:
标签: android firebase-realtime-database