android - Firebase 根据日期按点排序

标签 android sorting firebase firebase-realtime-database

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

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

    });

最佳答案

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

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

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

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

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

这样你就可以按顺序获得一月份的高分:

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

关于android - Firebase 根据日期按点排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41552884/

相关文章:

android - 如何将多于一列绑定(bind)到 TextView

java - 按值降序对 linkedhashmap 进行排序

sorting - 如何快速检索Cassandra表中的排序值?

java - 如何根据条件从firebase数据库中获取图像url并将其加载到ImageView中?

android - 无需轮询即可访问串行端口 (/dev/tty*) 传入数据

android - 如何使样式 ="?attr/actionButtonStyle"可用于矩形工具栏按钮

android - 除了 admob/adsense 之外的广告网络是否具有良好的填充率?

arrays - 如果你可以在 7 次比较中对 5 个数字进行排序,那么如何在 10 次比较中对 6 个数字进行排序?

android - Firebase 电话身份验证流程

Node.js - 如何将缓冲区转换为文件或 blob