我构建了游戏应用程序,并将记录保存在FireBase的实时数据库中。 数据库外观:
{
"Ka8xxTgyFB8yYKH50j" : {
"score" : 10,
"seconds" : 1325
},
"K222xTgyFBF33FD50j" : {
"score" : 10,
"seconds" : 425
},
"Ka32T23R328yYKH50j" : {
"score" : 5,
"seconds" : 115
},
"F323F32FB8yYKH50j" : {
"score" : 30,
"seconds" : 2335
}
}
}
我想从FireBase中获取按得分排序的数据,然后按秒排序。 在此示例中,数据的正确顺序应为:
得分:5秒:115
得分:10秒:425
得分:10秒:1325
得分:30秒:2335
如何通过其他方式使用orderByChild执行此操作? 谢谢
答案 0 :(得分:1)
由于firebase不允许进行多重排序,因此我建议您创建一个排序列并根据您的排序要求进行更新。
在您的情况下,您可以将秒和分数连接起来,然后将其存储为整数。为了使其长度一致,必须在秒数上填充0,以表示6个字符(取决于您的得分和秒数的最大可能值)。
可以说,最大分数是100,最大秒数是50000,您的排序顺序是score
和5 chars of seconds
的组合,转换为整数。
示例:
{
"Ka8xxTgyFB8yYKH50j" : {
"score" : 10,
"seconds" : 1325,
"sort_order": 1001325
},
"K222xTgyFBF33FD50j" : {
"score" : 10,
"seconds" : 425,
"sort_order": 1000425
},
"Ka32T23R328yYKH50j" : {
"score" : 5,
"seconds" : 115
"sort_order": 5000115
},
"F323F32FB8yYKH50j" : {
"score" : 30,
"seconds" : 2335,
"sort_order": 3002335
}
}
这样,您可以按升序和降序对它进行快速排序。
答案 1 :(得分:0)
您可以尝试这样。 上传时先对数据进行排序。
databaseReference.**orderByValue("score")**.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
此后,在获取数据时再次排序
setmFirebaseAdapter1(new FirebaseRecyclerAdapter<taskdata, wealth.ShowDataViewHolder>(
taskdata.class, R.layout.budget_rv_layout, wealth.ShowDataViewHolder.class,retrieceds.**orderByChild(seconds)**) {
public void populateViewHolder(final wealth.ShowDataViewHolder viewHolder, final taskdata model, final int position) {
})