2017-07-30 126 views
-1

我試圖 「過濾結果」 的結果用下面的代碼:火力地堡orderByChild - 怪異的行爲

方法1:

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 ins't濾波。
這是爲什麼發生?

回答

2

當您調用其中一種查詢方法(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() { 
    ...