2017-12-13 3 views
0

Ich versuche, die Daten eines Benutzers aus der Cloud Firestore-Datenbank abzurufen und sie in einem Fragment anzuzeigen. Da die Abfrage in Firestore asynchron funktioniert, wird die Benutzeroberfläche geladen, bevor alle Daten aus der Firestore-Datenbank abgerufen wurden. Die OnViewCreated-Methode meines Fragments lädt Nulldaten, wenn die Abfrage nicht schnell genug ist.Ladestandsanzeige für Firestore-Show beim Abrufen von Daten

Was ist die beste Vorgehensweise, um dieses Problem zu vermeiden? Soll ich während der Bearbeitung der Abfrage einen Ladekennzeichen anzeigen? Wenn ja, woher weiß ich, wann es fertig ist?

Auch, was ist die beste Praxis für das Abrufen der Daten in meiner User Klasse und teilen die gleiche Instanz unter den verschiedenen Fragmenten?

Antwort

1

Um dies zu beheben, müssen Sie addOnCompleteListener verwenden, wenn Sie versuchen, ein Dokument aus einer Cloud Firestore-Datenbank zu erhalten. Dies bedeutet, dass die Methode onComplete() ausgelöst wird, und weil sie ein asynchrones Verhalten hat, müssen Sie eine andere Methode aufrufen oder die UI-Elemente innerhalb dieser Methode direkt anzeigen, andernfalls wird sie immer null sein.

Es gibt einen weiteren Ansatz, um einen Callback hinzuzufügen, um auch außerhalb dieser Methode darauf zugreifen zu können. Dafür, ich recomand tauche in asynchrone Welt und sehe meine Antwort von diesem post. Dies ist für die Daten außerhalb der onDataChange() Methode, aber es ist fast das Gleiche.

Für die beste Benutzererfahrung können Sie eine Ladeanzeige hinzufügen, damit der Benutzer keinen leeren Bildschirm sehen kann.

+0

Danke für die Antwort. Warum 'addOnCompleteListener' anstelle von' addOnSuccessListener'? Auch wenn Sie einen Kommentar über meine letzte Frage hinzufügen könnten, wäre das großartig. –

+0

Da 'addOnCompleteListener' aufgerufen wird, wenn die Aufgabe abgeschlossen ist, müssen Sie in diesem Moment die UI-Elemente anzeigen. Genauso wie du es mit Aktivitäten machst, musst du mit Fragmenten arbeiten. –

+0

Danke. Und tatsächlich hat der Post, den du verlinkt hast, den Trick gemacht. –

Verwandte Themen