Gil*_*Gil 16 android firebase firebase-realtime-database
文档说他们都在Firebase数据库位置收听更改.
Mar*_*ych 23
他们这样做几乎同样的事情,虽然ChildEventListener可有时更灵活:与ChildEventListener可以为4个动作指定不同的行为(onChildAdded,onChildChanged,onChildMoved和onChildRemoved),而ValueEventListener只提供 onDataChanged.
ChildEventListener还在子位置提供DataSnapshots(数据的不可变副本),而ValueEventListener提供整个节点的DataSnapshot.
只有在特定值更改时才会触发ValueEventListener,但ChildEventListener不仅会侦听该节点的值,还会侦听树的所有子节点.比如说,你有节点,它有一个孩子.当此节点更改时,将触发ValueEventListener,但也会触发更新子级值的ChildEventListener.文档说,你应该谨慎使用ChildEventListener - 它可以被触发很多次.
小智 5
这些是两者之间的关键差异
如果您的数据库有以下记录:
-LDU4T1buanVuJrpOYxW
message:"hi stack"
user: "john"
-LDasdfa1buanVuJrpOYxW
message:"hi john"
user: "stack"
Run Code Online (Sandbox Code Playgroud)
1)关于新条目:
2)因为a)在childeventlistener获取新记录是
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
Map<String,String> map =(Map) dataSnapshot.getValue();
String message = map.get("message").toString();
Run Code Online (Sandbox Code Playgroud)
因为b)在ValueEventListener中获取新记录是
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot data : dataSnapshot.getChildren()) {
.... loop until end
Map<String,String> map = (Map)data.getValue();
String message = map.get("message").toString();
Run Code Online (Sandbox Code Playgroud)
因此,例如,如果你不在乎发生什么,当有人删除第一个在ValueEventListener你总是得到通知,但在ChildEventListener你,如果你重写onChildRemoved只得到通知.
所以这取决于你想做什么.例如在聊天应用中.您只关心新邮件,不想再在聊天室中重新插入所有邮件.
| 归档时间: |
|
| 查看次数: |
12130 次 |
| 最近记录: |