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() naDataSnapshotsi 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?

questionAnswers(2)

yourAnswerToTheQuestion