2016-12-02 2 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()'. В противном случае вам нужно установить 'ValueEventListener' на узле с UID – 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

Смежные вопросы