簡體   English   中英

如何在Java / Android中按降序獲取Firebase項目

[英]How can I get firebase items in descending order in Java / Android

假設我有一些數據,如下所示:

"teilnehmer" : {
      "ATYFdfNRThzrEC83" : {
        "score" : 2500,
        "teamname" : "Was ist mit Karsten los?"
      },
      "VMT9hp65Tui55J2" : {
        "score" : 12500,
        "teamname" : "Team Zombie.de"
      },
      "dPkdf233dbMjCA2" : {
        "score" : 21635,
        "teamname" : "Bielefeld zwei"
      },
      "U1xTtKJa0wdZ13"  : {
        "score" : 500,
        "teamname"  : "Max der Eugen"
      }.............

這段Java代碼:

    mDatabase.child("rallye").child("teilnehmer").orderByChild("score").addChildEventListener(new ChildEventListener() {
            @Override
            public void onChildAdded(DataSnapshot dataSnapshot, String s) {
                // teamname, Platzierung, Punkte
                Teilnehmer teilnehmer = new Teilnehmer(((String) dataSnapshot.child("teamname").getValue()), "Platz x", (dataSnapshot.child("score").getValue())+" Punkte");
                teilnehmerList.add(teilnehmer);     // add to recyclerview
                mAdapter.notifyDataSetChanged();    // save
            }

            @Override
            public void onChildChanged(DataSnapshot dataSnapshot, String s) { }

            @Override
            public void onChildRemoved(DataSnapshot dataSnapshot) {
                //adapter.remove((String) dataSnapshot.child("teamname").getValue());
                //teilnehmerList.remove();
                mAdapter.notifyDataSetChanged();
            }

            @Override
            public void onChildMoved(DataSnapshot dataSnapshot, String s) { }

            @Override
            public void onCancelled(DatabaseError databaseError) {}

        });

這不行

.orderByChild("score")

螢幕擷取畫面:i.stack.imgur.com/Y8NlW.png

我在Rallygame中獲得了隊名和得分。 但是順序是升序的,而不是降序的:/

Output:
Teamname ----------- Score
Team Zombie            50
Team xyz               1500
Team foo              16000

順序錯誤 :/


然后我有第二個問題,如何輸出當前的排名?

例如:

我的列表顯示如下:

Rank     Teamname      Points
1        "Team 1"       25.000
2        "Team red"     12.000
3        "Team google"   9.500
4        "Team yellow"   1.250

我的Firebase包含:

"ATYFdfNRThzrEC83" : {
            "score" : 2500,
            "teamname" : "Was ist mit Karsten los?"
          },

我只有2列,分數和隊名

在我的第一個問題中,我解決了訂單問題(最高分->第一名)

我的布局文件:

<TextView
        android:id="@+id/teamName"
        android:textColor="@color/teamTitle"
        android:textSize="16dp"
        android:textStyle="bold"
        android:layout_alignParentTop="true"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <TextView
        android:id="@+id/teamRank"
        android:layout_below="@id/title"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <TextView
        android:id="@+id/teamScore"
        android:textColor="@color/teamScore"
        android:layout_width="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_height="wrap_content" />

3個輸出TextView,但Firebase中只有2個數據列。 得分最高的團隊將排在排名第1位(我不知道我的德語“ Platz n”的正確英語單詞)。 比等級2,等級3 ...

我的第一次嘗試:

int i = 1;
while(dataSnapshot.child("teamname").getValue()) {

Teilnehmer teilnehmer = new Teilnehmer(((String) dataSnapshot.child("teamname").getValue()), "Platz "+i, (dataSnapshot.child("score").getValue())+" Punkte");
                teilnehmerList.add(0,   teilnehmer);     // add to recyclerview: add(0, teilnehmer) gebe in desc aus von 0 zum n. eintrag
                mAdapter.notifyDataSetChanged();    // save
i++;
}

我想要連續三個輸出。 隊名,排名中的排名和游戲中的當前分數。

但是我的while循環不起作用。

在此功能中:

@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
    // teamname, Platzierung, Punkte
    Teilnehmer teilnehmer = new Teilnehmer(((String) dataSnapshot.child("teamname").getValue()), "Platz x", (dataSnapshot.child("score").getValue())+" Punkte");
    teilnehmerList.add(teilnehmer);     // add to recyclerview
    mAdapter.notifyDataSetChanged();    // save
}

我假設您要添加到數組列表。 而不是添加到末尾,而是添加到開頭,因為orderByChild正在工作,並且按升序排列。 Firebase不支持降序。

teilnehmerList.add(0, teilnehmer); // <--- add 0 as 1st parameter

您的第二個問題缺少細節。 創建另一個問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM