Firebase按点排序

时间:2017-01-09 16:48:25

标签: android sorting firebase firebase-realtime-database

我正在尝试添加月度记分牌,但对我来说似乎有点困难。我不知道如何将特定值取为某个列表或数组。与日期一样,只有09.01.2017值的日期。如果我能做到那么我认为我可以按价值对它们进行排序。

enter image description here

        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();
        }

    });

1 个答案:

答案 0 :(得分:8)

如果要查询日期范围,则应将其存储为允许查询范围的格式。对于可以是按字典可排序的timestamp或字符串的日期。

您当前将日期存储为dd.MM.yyyy字符串,这不是按字典顺序排序的。我建议切换到yyyy-MM-dd2019-01-09。这样,如果你想获得1月份的所有帖子,你可以进行范围查询:

ref.orderByChild("date").startAt("2017-01-01").endAt("2017-01-31")

如果您已经知道您需要每月排行榜,我建议您更改数据库结构以反映这一点。所以:按照他们所在的月份存储分数:

2017-01
  -K34761761238712
    name: "GGGG"
    score: 3
  -K4875731941298a
    name: "AAA"
    score: 1

通过这种方式,您可以获得1月份的高分:

ref.child("2017-01").orderByChild("score").limitToLast(10)