0

我有這樣的規則在我火力數據庫火力地堡的OrderBy()與equalTo()返回零個項目

"Item":{ 
    "$userId": { 
    ".write": "auth != null && $userId === auth.uid" 
    } 
} 

我有這樣的數據

Item 
nXQw4a2jlMg34567811glaTD0bE2 
    -KNJLSxfR_S8AeLj0v7d 
    height:20 
    id:-KNJLSxfR_S8AeLj0v7d 

當我寫如下的查詢,一切正常。

mDataBase = FirebaseDatabase.getInstance().getReference(FirebaseConstants.ITEM); 
    query = mDataBase.orderByChild("userId/height").limitToLast(2); 

但下面的查詢返回零

public void getItems(String key){ 
//key is -KNJLSxfR_S8AeLj0v7d 
DatabaseReference reference = FirebaseDatabase.getInstance().getReference(FirebaseConstants.ITEM); 
reference.orderByChild("userId/id").equalTo(key).addValueEventListener(new MyEventListener()); 

} 

我的聽衆

private class MyEventListener implements ValueEventListener{ 

@Override 
public void onDataChange(DataSnapshot dataSnapshot) { 
    if(dataSnapshot != null){ 

    Log.d("size is "+dataSnapshot.getChildrenCount()) // returns 0 
    for(DataSnapShot entry: dataSnapshot){ 
    Item item = entry.getValue(Item.class); 
    Log.d("height is "+ item.getHeight()) 
    } 

    } 

} 

@Override 
public void onCancelled(DatabaseError databaseError) { 

} 

} 

爲什麼回零,我已經在我的火力DB數據?

回答

0

有幾個小問題與您的代碼:

  1. 沒有孩子userId,您試圖訂購/過濾器上:orderByChild("userId/height")。這意味着結果將是空的。

  2. 你無法遍歷快照(我很驚訝,即使編譯)。相反,你應該遍歷其子:for(DataSnapShot entry: dataSnapshot.getChildren()) {...

  3. 你正在使用的查詢,但你的代碼將是更有效和更大量的可擴展性,如果你簡單地查找該項目由他們的關鍵:reference.child(key).addValueEventListener(...