这是我的结构:
{
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 回答
Firebase查询在节点列表上执行,然后在您指定的属性上筛选该列表中的每个子节点 .
使用
mDatabase.child("users").child(id_client)
,您已经在特定用户的节点中:在此处调用
orderByChild()
将尝试过滤此JSON的每个子节点 . 由于子节点是简单值(例如point: 120.0
),因此过滤器将不匹配任何内容 .如果查询某个级别的用户列表,则更有可能获得所需的结果:
此查询将返回包含
yudwjwnecj
的列表 .