У меня следующая Firestore
структура документа:
Это вывод
Как вы можете видеть stop
, который находится под 12:00PM
, отображается под 1:00PM
. Я думаю, что это из-за запроса asynchronous
. Так как я могу справиться с этим?
На самом деле сначала я получаю документ, затем получаю keys
отправления, которые равны times
, затем получаем массив stops
того времени, теперь снова отправьте запрос на получение имени и города остановки.
Вот код, который я использую для извлечения времени и всех остановок этого времени.
db.collection(DBMeta.COLLECTION_ROUTE)
.document(routeIntent.getId())
.addSnapshotListener(new EventListener<DocumentSnapshot>() {
@Override
public void onEvent(@Nullable DocumentSnapshot documentSnapshot,
@Nullable FirebaseFirestoreException e) {
Route route = null;
if(documentSnapshot!=null)
route = documentSnapshot.toObject(Route.class);
if(route != null){
if(route.getDeparture() != null){
String[] departures = route.getDeparture().keySet().toArray(new String[route.getDeparture().keySet().size()]);
for(String time : departures){
Object object = route.getDeparture().get(time).get(DBMeta.DOCUMENT_ROUTE_STOPS);
ArrayList<DocumentReference> stops = (ArrayList<DocumentReference>)object;
departureLayout.addView(timeTextView(time));
for(DocumentReference stop : stops){
stop.get().addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>() {
@Override
public void onSuccess(DocumentSnapshot documentSnapshot) {
final String bussStop = documentSnapshot.getString(DBMeta.DOCUMENT_STOP_NAME);
DocumentReference doc = documentSnapshot.getDocumentReference(DBMeta.DOCUMENT_STOP_CITY);
if(doc != null){
doc.get()
.addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>() {
@Override
public void onSuccess(DocumentSnapshot documentSnapshot) {
String cityAbbrev = documentSnapshot.getString(DBMeta.DOCUMENT_CITY_ABBREV);
departureLayout.addView(stopTextView(bussStop + " - " + cityAbbrev));
}
});
}
}
});
}
}
}
}
}
});