2016-12-02 14 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")のようなクエリを作成する必要があります。 orderByChild/equalToクエリは、それらが特異値ではなくデータのリストを返す条件付きクエリになるため、どのように消えてしまったかに注目してください。

+0

UID' -KXwSxD0GYVC6awV8abw'がわからない場合はどうすればよいですか?これらは自動的に生成され、私はそれらを追跡しません。 – Distwo

+0

これは子供たちの反復作業によってうまくできました! – Distwo

関連する問題