首页 文章

在Firebase中查询startAt和endAt时出错

提问于
浏览
0

这是我的结构:

{
users: {
    "aufgdheyrl": {
        id: "152",
        name: "Joe Jackson",
        level: "A2",
        point: 120.0
    },
    "yudwjwnecj": {
        id: "134",
        name: "Samnuel Jackson",
        level: "B3",
        point: 80.5
    },
    "fuwhdkcjdo": {
        id: "188",
        name: "Jack Jack",
        level: "B2",
        point: 50.0
    }
}
}

这是我的代码,只有当它的级别或点值大于另一个时,才能获取所选用户 . 但查询不起作用 .

我使用 mDatabase.child("users").child(id_client) 获取所选用户的引用 .

DatabaseReference mUserRef = mDatabase.child("users").child(id_client);
Query query1 = mUserRef.orderByChild("level").startAt(level);
Query query2 = mUserRef.orderByChild("point").startAt(point);
query1.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            Log.d(TAG, "datasnaphot " + dataSnapshot.toString());
            User user = dataSnapshot.getValue(User.class);
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
            // Getting Post failed, log a message
            Log.w(TAG, "getUser:onCancelled", databaseError.toException());
        }
    });
query2.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            Log.d(TAG, "datasnaphot " + dataSnapshot.toString());
            User user = dataSnapshot.getValue(User.class);
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
            // Getting Post failed, log a message
            Log.w(TAG, "getUser:onCancelled", databaseError.toException());
        }
    });

例如,我有这个值:

String id_client = "aufgdheyrl";
double level = 200.0;
String point = "A1";

query1和query2返回对象但query1必须具有空值而不是用户对象Idem如果我有level =“B1”,则query2返回用户对象而不是null值

1 回答

  • 0

    Firebase查询在节点列表上执行,然后在您指定的属性上筛选该列表中的每个子节点 .

    使用 mDatabase.child("users").child(id_client) ,您已经在特定用户的节点中:

    "aufgdheyrl": {
        id: "152",
        name: "Joe Jackson",
        level: "A2",
        point: 120.0
    }
    

    在此处调用 orderByChild() 将尝试过滤此JSON的每个子节点 . 由于子节点是简单值(例如 point: 120.0 ),因此过滤器将不匹配任何内容 .

    如果查询某个级别的用户列表,则更有可能获得所需的结果:

    Query query = mDatabase.child("users").orderByChild("level").startAt("B3");
    

    此查询将返回包含 yudwjwnecj 的列表 .

相关问题