Android Firebase orderByChild-奇怪的行为
我尝试使用以下代码“筛选结果”: 方法1:Android Firebase orderByChild-奇怪的行为,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,我尝试使用以下代码“筛选结果”: 方法1: DatabaseReference ref = FirebaseDatabase.getInstance().getReference(CollaboratorSkillDao.COLLABORATOR_SKILLS_PATH); ref.orderByChild(CollaboratorSkill.JSON_COLLABORATOR_ID).equalTo(id); ref.addValueEventListener(new OnDataChange
DatabaseReference ref = FirebaseDatabase.getInstance().getReference(CollaboratorSkillDao.COLLABORATOR_SKILLS_PATH);
ref.orderByChild(CollaboratorSkill.JSON_COLLABORATOR_ID).equalTo(id);
ref.addValueEventListener(new OnDataChange() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Log.d(TAG, "onDataChange: " + dataSnapshot.getChildrenCount());
}
});
方法2:
FirebaseDatabase.getInstance().getReference(CollaboratorSkillDao.COLLABORATOR_SKILLS_PATH)
.orderByChild(CollaboratorSkill.JSON_COLLABORATOR_ID).equalTo(id)
.addValueEventListener(new OnDataChange() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Log.d(TAG, "onDataChange: " + dataSnapshot.getChildrenCount());
}
});
据我所知,它们是等价的但对于方法1,它返回58个结果;对于方法2,它返回4个结果
这意味着方法1不进行过滤。
为什么会发生这种情况?当您调用其中一个查询方法(
orderBy…
,equalTo
等)时,它会创建一个新的查询对象。因此,您需要在变量中捕获并使用它:
DatabaseReference ref = FirebaseDatabase.getInstance().getReference(CollaboratorSkillDao.COLLABORATOR_SKILLS_PATH);
Query query = ref.orderByChild(CollaboratorSkill.JSON_COLLABORATOR_ID).equalTo(id);
query.addValueEventListener(new OnDataChange() {
...