Ich muss einen Recyclerview mit den Reisedaten füllen. Dies bedeutet, dass ich Daten aus zwei verschiedenen Sammlungen aus meiner Firestore -Datenbank abrufen muss. >
Sammlung 2: "Trips", die alle Daten für jede Reise enthalten Diese Triverid möchte ich weitere Informationen über diesen Benutzer abrufen, daher brauche ich zwei Abfragen. p>
, um dies im Detail zu erklären, hier ist mein nicht arbeitender < /strong>: < /p>
public class Trip {
private String attribute1, attribute2, etc.
private User driver;
... constructor, getters, setters
}
public class User {
private String id, username, email, etch.
... constructor, getters, setters
// Fragment class
private void retrieveTrips(){
database.collection("trips")
.get()
.addOnCompleteListener(task -> {
if(task.isSuccessful() && task.getResult() != null)
{
Trips = new ArrayList();
for(QueryDocumentSnapshot queryDocumentSnapshot : task.getResult()){
Trip trip = new Trip();
trip.setTripUid(queryDocumentSnapshot.getId());
trip.setStartTime(queryDocumentSnapshot.getString("startTime"));
trip.setStartLocation(queryDocumentSnapshot.getString("startLocation"));
// etc.
String driverId = queryDocumentSnapshot.getString("driverId");
// Now I need to retrieveUser driver data using driverId
Query driverQuery = database.collection("users").whereEqualTo("userId" , driverId);
driverQuery.get().addOnCompleteListener( task2 -> {
if (task2.isSuccessful() && !task2.getResult().isEmpty()) {
for (QueryDocumentSnapshot document : task2.getResult()) {
String driverUsername = document.getString("username");
String driverEmail = document.getString("email");
// etc.. many attributes
trip.setDriver(new User(driverUid,driverUsername,driverEmail, etc...));
}
} else if(task2.getResult().isEmpty())
{
//Driver not found in Firestore
}
else {
// task2 not successful
}}).addOnFailureListener(e -> // error));
}
if(!trips.isEmpty()){
// if trips list is not empty, set the adapter
TripAdapter tripAdapter = new TripAdapter(trips,this);
binding.availableTripsRecyclerView.setAdapter(tripAdapter);
} else{
// found no trips to show
showErrorMessage();
}
}
else{
// error !task.isSuccessful() or task.getResult() == null
}
});
< /code>
Problem 1) Sowohl die Auslöser- als auch die Fahrtenliste müssen als endgültige Listen deklariert und außerhalb der Hörer als Klassenattribute platziert werden.
Problem 2). Zuhörer laufen asynchron zueinander. Der "Outside" -Hörer führt und endet vor dem "verschachtelten" Start. Möglichkeit, diese verschachtelten Abfragen zu implementieren? BR /> Die Schleife startet für jedes Dokumentenergebnis < /li>
Die Attribute der ersten Reise werden in einem Ausladungsobjekt gespeichert. und verschachtelter Hörer heißt .. < /li>
Die Details der Benutzerfahrer werden abgerufen und im selben Trip -Objekt gespeichert. < /li>
Trip -Objekt ist vollständig und kann jetzt sein In der Liste der Reisen hinzugefügt. /li>
Die Liste ist jetzt abgeschlossen und wir können jetzt den Adapter festlegen. < /li>
< /ol>
Synchronisieren Sie zwei Ereignishörer / Verwenden verschachtelter Abfragen für Firestore ⇐ Android
-
- Similar Topics
- Replies
- Views
- Last post
-
-
Generierung von Bauherren für die Liste verschachtelter Mitglieder in Lombok
by Anonymous » » in Java - 0 Replies
- 11 Views
-
Last post by Anonymous
-