2016-06-16 1 views
2

Я использую событие OnChildAdded для получения всех данных из базы данных на Android.FireBase OnChildAdded не вызывается на Android

Впервые и много позже, он работает хорошо. Но что-то, onChildAdded больше не звонит старому ребенку. Удаление и установка приложения снова заставляют его работать снова.

Я проверил разрешение и добавил событие. Я не знаю, что случилось, и что нужно сделать, чтобы исправить это.

Этот код, я использую для инициализации

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()); 
     } 
    }; 

Тогда я добавить событие здесь

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

Вы можете разместить свой код? – Pietu1998

+0

Yup. Отредактировано .... –

+1

где вы добавляете слушателя? В каком жизненном цикле? – Skye

ответ

0

OnChildAdded событие используется для обновления данных. Попробуйте восстановить данные с помощью ListenerForSingleValueEvent :), то в OnDataChange вы можете поместить все загруженные элементы в списке :) как:

@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

Когда вы добавляете 'ChildEventListener', его' onChildAdded() 'будет вызываться для каждого существующего дочернего элемента и после этого всякий раз, когда добавляется новый ребенок. –

Смежные вопросы