2016-11-09 3 views
1

У меня есть этот запрос в моей FirebaseКак узнать количество элементов, возвращаемых запросом в Firebase

mDataBase = FirebaseDatabase.getInstance().getReference("animals); 
     query = mDataBase.orderByChild("height").limitToLast(20); 
    query.addChildEventListener(new AnimalsEventListener()); 

Мой слушатель

private class AnimalsEventListener implements ChildEventListener{ 

private AnimalsEventListener(){ 
} 

@Override 
public void onChildAdded(DataSnapshot dataSnapshot, String s) { 
    Animals details = dataSnapshot.getValue(Animals.class); 
} 

@Override 
public void onChildChanged(DataSnapshot dataSnapshot, String s) { 

} 

@Override 
public void onChildRemoved(DataSnapshot dataSnapshot) { 

} 

@Override 
public void onChildMoved(DataSnapshot dataSnapshot, String s) { 

} 

@Override 
public void onCancelled(DatabaseError databaseError) { 

} 
} 

Как я могу получить размер всех животных, которые соответствовали запросу перед работой над dataSnapShot? иногда они могут быть меньше 20;

ответ

2

Невозможно узнать количество детей, используя ChildEventListener, вместо этого использовать ValueEventListener.

public class AnimalsEventListener implements ValueEventListener { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     if (dataSnapshot.getChildrenCount() == 20) { 
      for (DataSnapshot dataSnapshotEntry : dataSnapshot.getChildren()) { 
       Animals details = dataSnapshotEntry.getValue(Animals.class); 
      } 
     } 
    } 

    @Override 
    public void onCancelled(DatabaseError databaseError) { 

    } 
} 

Чтобы прикрепить этот приемник, используйте метод addValueEventListener()

query.addValueEventListener(new AnimalsEventListener()); 
+0

Вы абсолютно правы. Я думаю, что неправильно понял 'ValueEventListener'' onDataChange()'. kudos для напоминания мне –

1

Если вы хотите использовать childEventListener я рекомендую использовать у официального FirebaseArray class.

Чтобы получить количество элементов:

FirebaseArray mFirebaseArray = FirebaseArray(Query ref); 
mFirebaseArray.getCount(); 
+0

Вау, отлично выглядит. Можете ли вы привести пример того, как использовать этот класс, например, как подключить слушателя? Я не могу найти какой-либо пример в Интернете для Android. – Wilik

+1

По той же ссылке u можете найти firebaes ui связанные классы. Или вы можете использовать непосредственно firebas ui library. Вот recycleradapter, где массив огненной базы реализован с помощью прослушивателей. https://github.com/firebase/FirebaseUI-Android/blob/master/database/src/main/java/com/firebase/ui/database/FirebaseRecyclerAdapter.java – uguboz

+0

@uguboz, насколько это возможно, когда вы вызываете ' mFirebaseArray.getCount() 'все элементы будут добавлены в arraylist? –

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