如何在Java / Android中按降序获取firebase项目

时间:2017-06-06 09:07:32

标签: android firebase

我们说我有一些数据如下:

"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中获得了teamname和teamscore。但是顺序是升序而不是降序:/

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输出TextViews,但Firebase中只有2个Datacolumns。 得分最多的队伍将在排名/位置1(我不知道我的德语和#34; Platz n&#34的正确英语单词;)。比排名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循环不起作用。

1 个答案:

答案 0 :(得分:0)

在此功能中:

@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

你的第二个问题是缺乏细节。创建另一个问题。