2016-08-22 2 views
0

ich Feuerbasis in meiner Android-Anwendung benutzen und mein Baum sieht wie folgt ausAbfrage für Top-10 höchsten Punktzahl bekommen

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 

was ich versuche, den Benutzer die Top-10-Benutzername mit dem höchsten kills wird zeigen zu tun für Kanonen oder Panzer (je nachdem, welchen der Benutzer auswählt), aber ich kann keine Lösung finden.

Zuerst dachte ich, die Lösung wie

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

sein würde, aber es scheint nicht das Problem zu arbeiten, ist, dass es nicht die „tötet“ Kind zurückgibt. es gibt den ganzen Baum des Panzers zurück, auf den ich bereits zugreifen kann. Was ich will, ist eine Liste aller "tötet" Kinder, wenn das möglich ist? Und ich bin mir nicht sicher, wie sonst kann ich die höchsten Tötungen bekommen, weil es keine Möglichkeit gibt, zu wissen, welcher der Benutzernamen in Panzern oder Kanonen ist, wenn ich nicht alle Benutzernamen durchblättere.

Kann mir jemand dabei helfen?

Antwort

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) { 

      } 
      } 

oben Code erhalten Sie die alle Benutzer in Tanks chield dann diese Referenzen für alle Benutzer wiederholen dann alle Werte töten bekommen

+0

Vielen Dank für Ihre Antwort. Das ist jedoch nicht das Problem, das Problem ist, dass es nicht das "tötet" Kind zurückgibt. es gibt den ganzen Baum des Tanks zurück. – LazyDev

+0

Hier besteht die Benutzerliste aus den Feldern Tank, d. H. Benutzer1, Benutzer 5, Benutzer 7, Benutzer 2 –

0

Es ist ein bisschen schwer, sicher zu sein, aber ich denke, Sie suchen limitToLast():

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

den Code aus Narender Antwort auf eine Schleife über die Spieler verwenden dann.

Verwandte Themen