2016-11-23 42 views

回答

8

他們這樣做幾乎同樣的事情,雖然ChildEventListener可有時更靈活:與ChildEventListener可以爲4點的動作(onChildAddedonChildChangedonChildMovedonChildRemoved)指定不同的行爲,而ValueEventListener只提供onDataChanged

此外,ChildEventListener在兒童位置提供DataSnapshots(數據的不可變副本),而ValueEventListener提供整個節點的DataSnapshot。

+0

不是一個不可變的DataSnapshot?所以唯一的區別是ChildEventListener有4個特定的方法,而ValueEventListener有1個寬泛的方法(任何變化) – Gil

+0

是的。 DataSnapshot始終是不可變的。你是對的 - 如果你需要一個廣泛的方法,你寧願使用ValueEventListener。如果您有一些綁定功能來添加/更改/移動/移除子項目,則應使用ChildEventListener。 –

+0

此外,這個答案http://stackoverflow.com/a/34532739/2915480涉及到「Firebase事件保證」的有趣話題。這再一次證明了你對ValueEventListener的描述比ChildEventLIstener更廣泛。 –

5

ValueEventListener僅在特定值發生更改時才觸發,但ChildEventListener不僅偵聽該節點的值,還偵聽樹的所有子節點。說,你有節點,有一個孩子。 當此節點更改時,ValueEventListener將被觸發,但ChildEventListener也會在更改後的子值被更改時觸發。文檔說,你應該謹慎使用ChildEventListener - 它可以觸發很多次。

+0

謝謝,但值事件監聽器每次有變化時都會獲得新的快照嗎?您可以將範圍配置爲與childeventlistener有效執行相同操作的整個數據庫。這是我的困惑 – Gil

相關問題