2016-11-23 6 views

答えて

8

ChildEventListenerは時々、より柔軟にすることができますけれども彼らは、ほとんど同じことを行う:ValueEventListenerだけonDataChangedを提供しながら、あなたは、4つのアクション(onChildAddedonChildChangedonChildMovedonChildRemoved)ごとに異なる動作を指定することができますChildEventListenerで。

ChildEventListenerは、子の位置にDataSnapshots(データの不変なコピー)を提供し、ValueEventListenerはノード全体のDataSnapshotを提供します。

+0

は不変のDataSnapshotでもありませんか?したがって、唯一の違いは、ChildEventListenerには4つの特定のメソッドがあり、ValueEventListenerには1つの広いメソッド(任意の変更)があります。 – Gil

+0

DataSnapshotは常に不変です。そしてあなたは正しいのです.1つの広範なメソッドが必要な場合は、ValueEventListenerを使用します。子アイテムの追加/変更/移動/削除に結合する機能がある場合は、ChildEventListenerを使用する必要があります。 –

+0

また、この回答http://stackoverflow.com/a/34532739/2915480 "Firebase Events Guarantee"の興味深いトピックに関連しています。これは、ValueEventListenerについてのあなたの言葉がChildEventLIstenerよりも広いことを証明しています。 –

5

ValueEventListenerは、その特定の値が変更されたときにのみ起動されますが、ChildEventListenerはそのノードの値だけでなく、ツリーのすべての子ノードもリッスンします。言って、ノードがあります。ノードには子供が1人います。 このノードが変更されると、ValueEventListenerがトリガーされますが、子の値が変更されるとChildEventListenerもトリガーされます。ドキュメンテーションによると、ChildEventListenerは慎重に使用してください。何度もトリガされる可能性があります。

+0

ありがとうございますが、値のイベントリスナーは、変更の権利があるたびに新しいスナップショットを取得しますか?そして、childeventlistenerと同じことを効果的に行うデータベース全体にスコープを設定することができます。これは私の混乱です – Gil

関連する問題