2016-08-22 54 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的答案代码遍历所有的球员。