cha*_*ate 5 sorting android firebase firebase-realtime-database
我想添加一个月度记分牌,但对我来说似乎有点困难.我不知道如何将特定值取为某个列表或数组.与日期一样,只有09.01.2017值的日期.如果我能做到那么我认为我可以按价值对它们进行排序.
FirebaseDatabase database = FirebaseDatabase.getInstance();
final DatabaseReference highscoreRef = database.getReference();
// Ordering with score and adding key values as string to nameList and scoreList
highscoreRef.orderByChild("score").limitToLast(10).addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot snapshot, String previousChildKey) {
try {
nameList.push(snapshot.child("name").getValue().toString());
scoreList.push(snapshot.child("score").getValue().toString());
} catch (Exception e) {
//Toast.makeText(getApplicationContext(), "Error fetching data.", Toast.LENGTH_SHORT).show();
}
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onCancelled(DatabaseError databaseError) {
Toast.makeText(getApplicationContext(), "Error sending data.", Toast.LENGTH_LONG).show();
}
});
Run Code Online (Sandbox Code Playgroud)
Fra*_*len 10
如果要查询日期范围,则应将其存储为允许查询范围的格式.对于可以是按字典顺序排序的时间戳或字符串的日期.
您当前将日期存储为dd.MM.yyyy
字符串,这不是按字典顺序排序的.我建议切换到yyyy-MM-dd
,所以2019-01-09
.这样,如果你想获得1月份的所有帖子,你可以进行范围查询:
ref.orderByChild("date").startAt("2017-01-01").endAt("2017-01-31")
Run Code Online (Sandbox Code Playgroud)
如果您已经知道您需要每月排行榜,我建议您更改数据库结构以反映这一点.所以:按照他们所在的月份存储分数:
2017-01
-K34761761238712
name: "GGGG"
score: 3
-K4875731941298a
name: "AAA"
score: 1
Run Code Online (Sandbox Code Playgroud)
通过这种方式,您可以获得1月份的高分,其顺序为:
ref.child("2017-01").orderByChild("score").limitToLast(10)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6353 次 |
最近记录: |