![](/img/trans.png)
[英]ValueEventListener vs ChildEventListener for RecyclerView in Android
[英]What is the difference between ChildEventListener and ValueEventListener Firebase interfaces?
文檔說他們都在Firebase數據庫位置收聽更改。
他們這樣做幾乎同樣的事情,雖然ChildEventListener可有時更靈活:與ChildEventListener可以指定4點的動作(不同的行為onChildAdded
, onChildChanged
, onChildMoved
和onChildRemoved
),而ValueEventListener僅提供onDataChanged
。
ChildEventListener還在子位置提供DataSnapshots(數據的不可變副本),而ValueEventListener提供整個節點的DataSnapshot。
只有在特定值更改時才會觸發ValueEventListener,但ChildEventListener不僅會偵聽該節點的值,還會偵聽樹的所有子節點。 比如說,你有節點,它有一個孩子。 當此節點更改時,將觸發ValueEventListener,但也會觸發更新子級值的ChildEventListener。 文檔說,你應該謹慎使用ChildEventListener - 它可以被觸發很多次。
這些是兩者之間的關鍵差異
如果您的數據庫有以下記錄:
-LDU4T1buanVuJrpOYxW
message:"hi stack"
user: "john"
-LDasdfa1buanVuJrpOYxW
message:"hi john"
user: "stack"
1)關於新條目:
2)因為a)在childeventlistener獲取新記錄是
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
Map<String,String> map =(Map) dataSnapshot.getValue();
String message = map.get("message").toString();
因為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();
因此,例如,如果您不關心當某人刪除ValueEventListener中的第一個時發生的情況,您總會得到通知,但在ChildEventListener中,只有覆蓋onChildRemoved才會收到通知。
所以這取決於你想做什么。 例如在聊天應用中。 您只關心新郵件,不想再在聊天室中重新插入所有郵件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.