我们说我有一些数据如下:
"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循环不起作用。
答案 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
你的第二个问题是缺乏细节。创建另一个问题。