android - 在 Firebase、Android 中每个注册用户数据的排序分数

标签 android firebase firebase-realtime-database

我想按排序显示每个用户的分数。

我在 Firebase 控制台中的数据库结构如下所示

enter image description here

我创建了两个表,一个是Score,一个是User

在 Score 表中,我使用用户 ID、GameA 的分数、游戏 B 的分数和游戏 C 的分数

现在我想以排序的方式显示GameA的分数,每个用户都可以在 ListView 中看到排序后的数据,这样他就可以知道自己比别人落后了多少......

在 Firebase 中,我尝试使用 Query 但无法成功排序,

   Query queryRef = mDatabase.orderByChild("scores").limitToFirst(100);
    queryRef.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {

            for (DataSnapshot postSnapshot: dataSnapshot.getChildren()) {
                Score score=postSnapshot.getValue(Score.class);
                Log.d("test"," values is " + score.getScoreOfGameA()  + " " + score.getUserId());
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

上面的查询结果会来但是值为0,null

如下图

02-02 06:29:09.559 10791-10818/com.firebasedatabaselearn W/PersistentConnection: pc_0 - Using an unspecified index. Consider adding '".indexOn": "scores"' at / to your security and Firebase Database rules for better performance
02-02 06:29:09.562 10791-10791/com.firebasedatabaselearn W/ClassMapper: No setter/field for oFAgix9TlUNS92R2VJaJbNYtH3z2 found on class com.firebasedatabaselearn.module.Score
02-02 06:29:09.562 10791-10791/com.firebasedatabaselearn W/ClassMapper: No setter/field for FrJpw8SMzZYfbECuvhHvbxnbCmh2 found on class com.firebasedatabaselearn.module.Score
02-02 06:29:09.562 10791-10791/com.firebasedatabaselearn D/test:  values is 0 null
02-02 06:29:09.562 10791-10791/com.firebasedatabaselearn W/ClassMapper: No setter/field for NnmawN5gMFVhwaGmZxXgUCPsDMb2 found on class com.firebasedatabaselearn.module.Score
02-02 06:29:09.562 10791-10791/com.firebasedatabaselearn W/ClassMapper: No setter/field for oFAgix9TlUNS92R2VJaJbNYtH3z2 found on class com.firebasedatabaselearn.module.Score
02-02 06:29:09.562 10791-10791/com.firebasedatabaselearn W/ClassMapper: No setter/field for RLEmo9Vyq8Rktwn6Cuz4d6vadml2 found on class com.firebasedatabaselearn.module.Score
02-02 06:29:09.562 10791-10791/com.firebasedatabaselearn W/ClassMapper: No setter/field for FrJpw8SMzZYfbECuvhHvbxnbCmh2 found on class com.firebasedatabaselearn.module.Score
02-02 06:29:09.562 10791-10791/com.firebasedatabaselearn D/test:  values is 0 null

谁能建议我如何实现这一点?

最佳答案

终于访问了这个Firebase orderByChild and equalTo() queries don't work , 我通过下面的代码实现了

queryRef = mDatabase.child("scores").orderByChild("scoreOfGameA").limitToLast(100);
        queryRef.addValueEventListener(new ValueEventListener() {

            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                for (DataSnapshot postSnapshot: dataSnapshot.getChildren()) {
                    Score score=postSnapshot.getValue(Score.class);
                    Log.d("test"," values is " + score.getScoreOfGameA());
                }
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });

关于android - 在 Firebase、Android 中每个注册用户数据的排序分数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41983386/

相关文章:

android - 如何标记 Activity

android - Google Play 上的应用始终显示 "Update"而不是打开

Android mapview 部分加载瓦片

swift - 将 Firestore 添加到我的项目会导致我的实时数据库查询出错

android - FirebaseUI + Firebase 数据库 RecyclerView : No adapter attached; skipping layout inside fragment

mysql - 将MySQL数据迁移到Firebase的有效方法

swift - 使用 double 对 UITableView 进行排序

android - 如何通过 Android SDK 查看手机型号

javascript - 根据另一个引用中的 ID 获取 Firebase 对象数据

java - Firebase 处理嵌套数据