Die beste Methode zum Abrufen / Formatieren von Daten mit der Firebase Java API

8

Ich verwende Firebase für den Datenspeicher in einem Android -Projekt und verwende Firebase Java API , um mit Daten umzugehen. Ich bin mir jedoch nicht sicher, ob ich es so effizient wie möglich mache, und ich hätte gerne Tipps zu Best Practices für das Abrufen und Formatieren von Daten. Mein Firebase Repository sieht ungefähr so ​​aus ...

%Vor%

Zum Beispiel versuche ich hier, alle Daten aus einer Umfrage herauszuholen, um den Namen der Umfrage, ihre Wahlnamen und die Kandidatennamen und die Anzahl der Stimmen für jede Wahl aufzulisten. Ich bekomme die POLLS-Ebene DataSnapshot während der OnCreate() -Funktion meiner Hauptaktivität wie dieser ...

%Vor%

Dann fahre ich fort, die einzelnen Daten zu lesen, die ich brauche, indem ich nacheinander getValue() auf DataSnapshots aufruft und die Schlüssel der resultierenden HashMaps ...

überprüfe %Vor%

Das scheint eine ziemlich langweilige Methode zu sein, die Datenstruktur zu durchforsten, und ich frage mich, ob es einen besseren Weg gibt.

Ich habe die Methode getValue(java.lang.Class<T> valueType) in der Dokumentation gesehen, konnte sie aber in meinem Fall nicht ausführen, da ich mit zusammengesetzten Objekten und nicht nur mit Containern für primitive Typen arbeite. Wie weiß die Funktion, welche Firebase -Daten den Elementvariablen eines Modellobjekts zugeordnet werden sollen? Passt es Firebase Schlüsselnamen mit Mitgliedsvariablen zusammen, und müssen diese daher exakt gleich sein, mit Berücksichtigung der Groß- / Kleinschreibung? Wie würde dieser Deal mit Firebase generierte Schlüsselnamen erzeugen, wenn er auf ein List drückt? Wie konstruiert man Modellobjekte für zusammengesetzte Objekte?

    
MassStrike 29.07.2013, 18:15
quelle

2 Antworten

18

Die Methode getValue(java.lang.Class valueType) folgt denselben Regeln wie die jackson-Objekt-Mapping-Bibliothek (wir verwenden sie intern: Ссылка ). Daher müssen Ihre Java-Klassen Standardkonstruktoren (keine Argumente) und Getter für die Eigenschaften haben, die Sie zuweisen möchten ( Ссылка ). Kurz gesagt, die Schlüsselnamen in Firebase müssen mit den Mitgliedsvariablen übereinstimmen.

Ein Beispiel, das zusammengesetzte Objekte einschließlich einer Liste verwendet, finden Sie unter AndroidDrawing . Insbesondere enthält die Klasse Segment eine Liste von Point Instanzen. Es gibt einen Haken bei der Verwendung von Datenlisten, die mit der Methode .push() erstellt wurden. Da die generierten Schlüsselnamen Strings sind, sodass sie für alle Clients eindeutig sein können, deserialisieren sie das Map s und nicht List s. Wenn Sie jedoch über dataSnapshot.getChildren() iterieren, werden sie der Reihe nach zurückgegeben.

Wenn Sie nicht in eine HashMap deserialisieren möchten, können Sie darüber hinaus die Methode child () für DataSnapshot verwenden. Zum Beispiel:

%Vor%

In diesem Beispiel werden alle Werte, die nicht existieren, als null zurückgegeben.

Hoffe das hilft!

    
Greg Soltis 29.07.2013, 19:28
quelle
1

public T getValue (Klassenwerttyp)

1.Die Klasse muss einen Standardkonstruktor haben, der keine Argumente akzeptiert

2. Die Klasse muss öffentliche Getter für die Eigenschaften definieren, die zugewiesen werden sollen. Eigenschaften ohne öffentlichen Getter werden auf ihren Standardwert gesetzt, wenn eine Instanz deserialisiert wird

Überprüfen Sie es von: diese Quelle Ich werde dir helfen

Detail

    
Hoa Nguyen 18.10.2016 04:15
quelle

Tags und Links