【问题标题】:How do I create a leaderboard from the stats in my Firebase Realtime Database?如何根据 Firebase 实时数据库中的统计数据创建排行榜?
【发布时间】:2022-03-06 19:33:22
【问题描述】:

我想在我的应用中创建排行榜。排行榜应显示得分最高的 10 名最佳用户。我的 Firebase 数据库如下所示:

Firebase 数据库:

我已经创建了一个包含 10 个 TextView 的活动,一个在另一个之下。从第一个 TextView 开始,我想将文本更改为:

“第 1 名 | '用户名' | '高分' 得分”

现在我的问题:

对我来说最简单的方法是什么?

【问题讨论】:

  • 如果不传递它的键,您不能直接检索嵌套的子数据,我建议只检索数据到特定限制然后对其进行排序。

标签: java firebase firebase-realtime-database


【解决方案1】:

要获得得分最高的前 10 名用户,您可以使用如下查询:

DatabaseReference usersRef = FirebaseDatabase.getInstance().getReference("Users");
Query top10Query = usersRef.orderByChild("highscore").limitToLast(10);

然后用这样的方式读取匹配的数据:

top10Query.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for (DataSnapshot userSnapshot: dataSnapshot.getChildren()) {
            Log.i("Firebase", userSnapshot.getKey());
            Log.i("Firebase", userSnapshot.child("highscore").getValue());
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        throw databaseError.toException();
    }
}

以上内容将为您提供前 10 名,但按升序排列,因为 Firebase 无法按降序返回结果。要以正确的顺序显示它们,您需要在代码中反转结果,或以相反的顺序将它们添加到 UI。

【讨论】:

  • 非常感谢!将其插入线性布局的最简单方法是什么?有 add() 命令吗?
  • 您是否尝试过任何方法,无论是使用我的答案中的代码,还是您自己?
  • 我使用了您答案中的代码,效果很好,但现在我不知道将其添加到布局中的最简单方法。
  • 这是您第二次要求“最简单的方法”。你知道任何的方法吗?如果是这样,请告诉我们您知道哪些方法,我们可以帮助您选择最简单的方法,或改进它们。否则,您要求我们帮助您找到 任何 方法,并且有更好的地方可以学习,例如通过获取一些 tutorials 并将它们应用到您自己的用例中。 Firebase codelab for Android developers 也是一个很好的起点
  • 我刚刚找到了适合我的解决方案。现在一切正常。我会看看 Firebase Codelab,谢谢。
猜你喜欢
  • 2020-12-25
  • 2019-03-28
  • 2019-10-09
  • 2021-06-23
  • 1970-01-01
  • 1970-01-01
  • 2021-09-24
  • 2020-08-04
  • 2018-04-19
相关资源
最近更新 更多