2016-06-16 10 views
2

Ich verwende OnChildAdded Ereignis für alle Daten aus der Datenbank auf Android erhalten.FireBase OnChildAdded nicht auf Android

Das erste Mal und viele Zeit später funktioniert es gut. Aber etwas, onChildAdded nicht mehr Anruf für altes Kind sein. Deinstallieren Sie die App und installieren Sie sie erneut, damit sie wieder funktioniert.

Ich überprüft Erlaubnis und Ereignis hinzugefügt. Ich weiß nicht, was falsch ist und was zu tun ist, um es zu beheben.

Dieser Code verwende ich für init

prayersRef = database.child("prayers"); 

    Log.w(TAG, "FireBaseDatabaseManager"); 

    prayersListener = new ChildEventListener() { 
     @Override 
     public void onChildAdded(DataSnapshot dataSnapshot, String previousChildName) { 
      Prayer prayer = dataSnapshot.getValue(Prayer.class); 
      prayer.uid = dataSnapshot.getKey(); 
      Log.w(TAG, "onChildAdded:" + prayer.uid); 

      if (delegate != null) { 
       delegate.OnPrayerAdded(prayer); 
      } 
     } 

     @Override 
     public void onChildChanged(DataSnapshot dataSnapshot, String previousChildName) { 
      Log.w(TAG, "onChildChanged:" + dataSnapshot.getKey()); 
     } 

     @Override 
     public void onChildRemoved(DataSnapshot dataSnapshot) { 
      Log.w(TAG, "onChildRemoved:" + dataSnapshot.getKey()); 
     } 

     @Override 
     public void onChildMoved(DataSnapshot dataSnapshot, String previousChildName) { 
      Log.w(TAG, "onChildMoved:" + dataSnapshot.getKey()); 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 
      Log.w(TAG, "onCancelled", databaseError.toException()); 
     } 
    }; 

Dann Ereignis in füge ich hier

Log.i(TAG, "Add Child Event Listener"); 
    prayersRef.addChildEventListener(prayersListener); 
+0

Können Sie Ihren Code schreiben? – Pietu1998

+0

Yup. Bearbeitet .... –

+1

wo fügen Sie Listener hinzu? In welcher Lebenszyklusmethode? – Skye

Antwort

0

OnChildAdded Ereignis Auffrischen von Daten verwendet wird. Versuchen Sie zum Abrufen von Daten ListenerForSingleValueEvent mit :) dann in OnDataChange können Sie alle heruntergeladenen Objekte in der Liste setzen :) wie:

@Override 
public void onDataChange(DataSnapshot dataSnapshot) { 
    List<Model> models = new ArrayList<>(); 
    for(DataSnapshot snapshot : dataSnapshot.getChildren()) { 
     Model model = snapshot.getValue(Model.class); 
     models.add(model); 
    }  
} 
+1

Wenn Sie einen 'ChildEventListener' hinzufügen, wird dessen' onChildAdded() 'für jedes existierende Kind und danach jedesmal aufgerufen, wenn ein neues Kind hinzugefügt wird. –

Verwandte Themen