我有一个问题,就是没有理由调用onChildAdded(),当某些东西添加时它确实可以正常工作
这是听众:
comment = new Firebase(MY_URL).child("Comments").child(channel);
childEventListener = new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
if (dataSnapshot != null && dataSnapshot.getValue() != null) {
try {
comment = new ObjectMapper().writeValueAsString(commentObject);
System.out.println("onChildAdded"+comment +" s"+s);
} catch (JSONException e) {
e.printStackTrace();
}catch (JsonProcessingException e) {
e.printStackTrace();
}
}
}
//the other call backs
};
comment.addChildEventListener(childEventListener);
这是初始化代码,我添加了监听器:
@Override
public void onResume() {
super.onResume();
setupFireBaseListener(channel);
}
这是我删除了监听器:
@Override
public void onDetach() {
super.onDetach();
comment.removeEventListener(childEventListener);
}
请注意我在Application类上调用此方法:
Firebase.setAndroidContext(this);
这是我打印的数据:
onChildAdded{"name":"osama raddad","comment":"hi","user_id":"11"} s-K7qX32GeNLEvY4IDtnn oldData
onChildAdded{"name":"osama raddad","comment":"how","user_id":"11"} s-K7qX3UCI6vlcS5kfBdG oldData
我的firebase客户端sdk版本是2.2.1
答案 0 :(得分:2)
onChildAdded
并不只是在您连接后为每个添加的孩子启动,但它也会为每个现有孩子触发。
以下内容来自Firebase文档。
...每个现有孩子的
onChildAdded
event is triggered once 每次将新子项添加到指定路径时再次使用。
如果您只想要新添加的项目,则需要在每个项目中加入时间戳,然后执行orderByChild("timestamp").start(currentTimestamp)
查询。