2016-11-09 183 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()'所有項目將被添加到數組列表? –