2016-12-02 87 views
0

我想根據屬性值查詢我的Firebase數據庫中的項目。Firebase嵌套值

這裏是我的結構:

enter image description here

這裏是我的POJO對象:

public class LapTime { 

    private int vehicleType; 
    private String track; 
    private String user; 
    private int time; 
} 

,這裏是我的查詢代碼:

mDatabase.child("lap-time").orderByChild("track").equalTo(mTrackUuid).addValueEventListener(new ValueEventListener() { 
    @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      time = dataSnapshot.getValue(LapTime.class).getTime() + "ms"); 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 
    }); 

我的問題是, datasnapshot我回來了根爲lap-time而不是U UID,因此getValue(LapTime.class)給我一個空對象...

這裏是datasnapshot我得到:

DataSnapshot { key = lap-time, value = {-KXwSxD0GYVC6awV8abw={track=-KXwSxCeV2Ib4Gt4pvjy, time=105000, vehicle-type=0, user=ZQKwPfRF0mVL5jAO7FaSPcsF7t42}} } 

而這正是我想獲得:

DataSnapshot { key = -KXwSxD0GYVC6awV8abw, value ={track=-KXwSxCeV2Ib4Gt4pvjy, time=105000, vehicle-type=0, user=ZQKwPfRF0mVL5jAO7FaSPcsF7t42}} } 

哪有我這樣做?

+1

可能是類似的問題http://stackoverflow.com/questions/40928787/cannot-retrieve-a-list-into-firebase-database/40929176?noredirect=1#comment69070082_40929176 –

+2

你想解析所有的孩子的圈速或特定的一個?你可以用'dataSnapshot.getChildren()'遍歷子元素。否則,您需要使用UID在節點上設置「ValueEventListener」 – Sunshinator

回答

1

由於您的查詢代碼實際上可能包含多個結果,因此應該調用dataSnapshot.getChildren()並遍歷子元素以獲得您要查找的結果。特別是,mDatabase.child("lap-time").orderByChild("track").equalTo(mTrackUuid)是一個可能有多個結果的查詢,因爲可能存在多個LapTime對象可能有指向相同mTrackUuid的軌跡的情況。現在,要獲取您發佈的日誌的結果,您需要構建如下所示的查詢:mDatabase.child("lap-time").child("-KXwSxD0GYVC6awV8abw")。請注意0​​查詢是如何消失的,因爲這些查詢會導致可能返回數據列表而不是單數值的條件查詢。

+0

如果我不知道UID「-KXwSxD0GYVC6awV8abw」,該怎麼辦?這些是自動生成的,我不記錄它們。 – Distwo

+0

好吧,它通過迭代孩子們的工作! – Distwo