2016-08-22 84 views
0

我用我的Android應用程序火力點,我的樹是這個樣子查詢獲得前10名得分最高的

data > tanks > username1 > kills = 1, tries = 3 
      > username5 > kills = 5, tries = 13 
      > username7 > kills = 3, tries = 7 
      > username2 > kills = 6, tries = 4 

data > cannons > username9 > kills = 31, tries = 33 
       > username7 > kills = 15, tries = 13 
       > username3 > kills = 13, tries = 77 
       > username6 > kills = 66, tries = 44 

什麼,我試圖做的是向用戶顯示的前10名用戶名最高殺死的大炮或坦克(取決於哪一個用戶選擇),但我似乎找不到解決方案。

起初我以爲解決辦法是像

ref.child("data/tanks").orderbyChild("kills") 

,但它似乎不工作的問題是,它不返回「殺死」的孩子。它會返回我已經可以訪問的坦克的整個樹。我想要的是如果可能的話,獲得所有「殺死」孩子的清單?我不知道我還有什麼可以獲得最高的殺傷力,因爲除非我遍歷所有用戶名,否則無法知道哪些用戶名在坦克或大炮中。

任何人都可以幫助我嗎?

回答

0
  DatabaseReference myref= FirebaseDatabase.getInstance().getReference().chield("tanks"); 
     myref.addListenerForSingleValueEvent(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 


      userlist= new ArrayList<String>(); 

      Toast.makeText(DataFromFirebase.this, "no of usersare " + dataSnapshot.getChildrenCount(), Toast.LENGTH_LONG).show(); 
      //String value = (String) dataSnapshot.getValue(); 

      // Result will be holded Here 
      for (DataSnapshot dsp : dataSnapshot.getChildren()) { 
       userlist.add(String.valueOf(dsp.getKey()));/
       } 
      @Override 
       public void onCancelled(DatabaseError firebaseError) { 

      } 
      } 

使用上面的代碼中你會得到那麼坦克的所有用戶chield重複此爲所有用戶參考文獻,然後讓所有殺值

+0

謝謝您的回覆。但這不是問題,問題是它不會返回「殺死」孩子。它會返回坦克的整個樹。 – LazyDev

+0

這裏用戶列表包括坦克的屏幕,即用戶1,用戶5,用戶7,用戶2 –

0

這是一個有點很難確定,但我認爲你正在尋找limitToLast()

var topScorers = ref.child("data/tanks").orderbyChild("kills").limitToLast(10); 

然後使用從Narender的答案代碼遍歷所有的球員。