Najlepszy sposób pobierania / formatowania danych za pomocą interfejsu API Java Firebase
używamFirebase
do przechowywania danych naAndroid
projekt i korzystanie zFirebase Java API
radzić sobie z danymi. Nie jestem jednak pewien, czy robię to tak efektywnie, jak to możliwe, i chciałbym zasięgnąć porady na temat najlepszych praktyk pobierania i formatowania danych. MójFirebase
repozytorium wygląda mniej więcej tak ....
-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) - ...
Więc, na przykład, tutaj staram się zebrać wszystkie dane z ankiety do listy ankiety, jej nazw wyborczych, nazwisk kandydatów i liczby głosów dla każdego wyboru. Dostaję poziom POLLSDataSnapshot
podczasOnCreate()
funkcja mojej głównej działalności jak ta ...
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);
}
}
}
});
}
Następnie przystępuję do odczytywania poszczególnych danych, których potrzebuję, kolejno dzwoniącgetValue()
naDataSnapshots
i sprawdzanie kluczy powstałychHashMaps
...
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");
}
}
};
}
}
Wydaje się to dość żmudnym sposobem na drążenie struktury danych i zastanawiam się, czy jest lepszy sposób.
WidziałemgetValue(java.lang.Class<T> valueType)
w dokumentacji, ale nie udało mi się go uruchomić w moim przypadku, ponieważ pracuję z obiektami złożonymi, a nie tylko kontenerami dla typów pierwotnych. Skąd funkcja wie coFirebase
dane do przypisania do jakich zmiennych składowych obiektu modelu? Czy pasujeFirebase
kluczowe nazwy ze zmiennymi składowymi, a zatem czy muszą być dokładnie takie same, z uwzględnieniem wielkości liter? Jak by to wyglądałoFirebase
wygenerowane nazwy kluczy, takie jak wytworzone, gdy naciskasz naList
? Jak konstruować obiekty modelowe dla złożonych obiektów?