Ich verwende Firebase
für die Datenspeicherung auf einem Android
-Projekt, und die Firebase Java API
verwenden, 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 ....Die beste Methode zum Abrufen/Formatieren von Daten mit Firebase Java API
-POLLS
NUMPOLLS - 5
(pollskey) - NAME - Poll1
NUMELECTIONS - 2
ELECTIONS
(electionskey) - NAME - Election1
NUMNOMINATIONS - 2
NUMVOTERS - 2
NUMBERTOELECT - 1
VOTERS - (votesrkey) - NAME - Charles
NUMBER - (678) 333-4444
.
.
.
(voterskey) - ...
NOMINATIONS - (nominationskey) - NAME - Richard Nixon
NUMBEROFVOTES - 2
.
.
.
(nominationskey) - ...
.
.
.
(electionskey) - ...
.
.
.
(pollskey) - ...
So zum Beispiel hier Ich versuche, alle Daten, um aus einer Umfrage Umfrage Namen aufzuzählen, es Wahl Name ist, und der Kandidaten-Name und Nummer der Stimmen für jede Wahl. Ich erhalte die Urnen DataSnapshot
während der OnCreate()
Funktion meiner Haupttätigkeit wie dieses Niveau ...
private static final Firebase polls = pollsFirebase.child("Polls");
protected void onCreate(Bundle savedInstanceState) {
polls.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
for (DataSnapshot child : snapshot.getChildren()) {
if (!child.getName().equals("NumPolls")) {
createPollTableAndHeaders(child);
}
}
}
});
}
Dann fahren Sie ich die einzelnen Teile der Daten ausgelesen ich nacheinander müssen getValue()
auf DataSnapshots
aufrufen, und von den oberen Tasten die resultierenden HashMaps
...
private void createPollTableAndHeaders(DataSnapshot poll) {
String pollName = "";
int numPolls;
Object p = poll.getValue();
if (p instanceof HashMap) {
HashMap pollHash = (HashMap) p;
if (pollHash.containsKey("Name")) {
pollName = (String) pollHash.get("Name");
}
if (pollHash.containsKey("Elections")) {
HashMap election = (HashMap) pollHash.get("Elections");
Iterator electionIterator = election.values().iterator();
while (electionIterator.hasNext()) {
Object electionObj = electionIterator.next();
if (electionObj instanceof HashMap) {
HashMap electionHash = (HashMap) electionObj;
if (electionHash.containsKey("Name")) {
String electionName = (String) electionHash.get("Name");
}
}
};
}
}
Dies scheint einen ziemlich mühsamer Weg durch die Datenstruktur zu Drilldown, und ich frage mich, ob es ein besserer Weg.
Ich habe die getValue(java.lang.Class<T> valueType)
-Methode in der Dokumentation gesehen, konnte sie aber in meinem Fall nicht zum Laufen bringen, da ich mit zusammengesetzten Objekten und nicht nur mit Containern für primitive Typen arbeite. Wie kann die Funktion wissen, welche Firebase
Daten welchen Membervariablen eines Modellobjekts zugeordnet werden sollen? Passt es zu Firebase
Schlüsselnamen mit Mitgliedsvariablen, und müssen diese daher exakt gleich sein, wobei die Groß-/Kleinschreibung beachtet werden muss? Wie würde das mit Firebase
erzeugten Schlüsselnamen umgehen, die beim Drücken auf eine List
erzeugt werden? Wie konstruiert man Modellobjekte für zusammengesetzte Objekte?
Cooler Dank Greg helfen. Gib mir ein paar Stunden, um nach Hause zu kommen und versuche, so zu arbeiten. Vielen Dank! – MassStrike
Ok cool, das ist alles, was ich brauche, um loszulegen. Danke Greg, danke für die schnelle Unterstützung. – MassStrike
Es tut mir leid, einen alten Thread zu erstellen, aber ich verwende GeoFire zusammen mit Firebase und die Geolocation-Klasse bietet keinen Standardkonstruktor. Also, wie sollte ich fortfahren, diese Art von Klasse zu deserialisieren? Ist eine Deserializer-Factory eingebettet? Vielen Dank ! – Leonardo