La documentation indique qu'ils écoutent tous les deux les modifications à un emplacement de base de données Firebase.
Ils font presque la même chose, bien que ChildEventListener puisse être parfois plus flexible: avec ChildEventListener vous pouvez spécifier un comportement différent pour 4 actions (onChildAdded
, onChildChanged
, onChildMoved
et onChildRemoved
), tandis que ValueEventListener ne fournit que onDataChanged
.
ChildEventListener fournit également des DataSnapshots (copies immuables des données) à l'emplacement de l'enfant tandis que ValueEventListener fournit un DataSnapshot d'un nœud entier.
ValueEventListener est déclenché uniquement lorsque cette valeur spécifique change, mais ChildEventListener écoute non seulement la valeur de ce nœud, mais également tous les nœuds enfants de l'arborescence. Disons que vous avez un nœud, qui a un enfant. ValueEventListener sera déclenché lorsque ce nœud change, mais ChildEventListener sera également déclenché lorsque de nouvelles valeurs enfants seront également modifiées. La documentation indique que vous devez utiliser ChildEventListener avec prudence - il peut être déclenché plusieurs fois.
ce sont les principales différences entre les deux
si votre base de données contient les enregistrements suivants:
-LDU4T1buanVuJrpOYxW
message:"hi stack"
user: "john"
-LDasdfa1buanVuJrpOYxW
message:"hi john"
user: "stack"
1) sur nouvelle entrée:
2) en raison de a) l'obtention du nouveau record dans childeventlistener est
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
Map<String,String> map =(Map) dataSnapshot.getValue();
String message = map.get("message").toString();
en raison de b) obtenir le nouvel enregistrement dans ValueEventListener est
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();
ainsi, par exemple, si vous ne vous souciez pas de ce qui se passe lorsque quelqu'un supprime le premier dans ValueEventListener, vous êtes toujours averti, mais dans ChildEventListener, vous n'êtes averti que si vous remplacez onChildRemoved.
cela dépend donc de ce que vous voulez faire. par exemple dans une application de chat. vous ne vous souciez que des nouveaux messages, vous ne voulez pas réinsérer tous les messages dans votre salle de chat.