2016-11-09 72 views
1

返回我有这个疑问在我火力地堡如何知道通过查询在火力地堡

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()'。荣誉提醒我 –

1

如果你想使用childEventListener我建议ü使用官方FirebaseArray class

为了获得该项目计数:

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

哇,看起来不错。你能否举一个例子说明如何使用这个类,包括如何附加这个监听器?我无法在Android上找到任何互联网上的例子。 – Wilik

+1

通过相同的链接你可以找到firebaes ui相关的类。或者你可以直接使用firebas ui库。以下是recycleradapter,其中的firebase数组是用侦听器实现的。 https://github.com/firebase/FirebaseUI-Android/blob/master/database/src/main/java/com/firebase/ui/database/FirebaseRecyclerAdapter.java – uguboz

+0

@uguboz如何确保当你调用' mFirebaseArray.getCount()'所有项目将被添加到数组列表? –