Meilleure façon de récupérer/format de données à l'aide de Firebase API Java

Je suis en utilisant Firebase pour le stockage de données sur un Android projet, et à l'aide de la Firebase Java API traiter les données. Je ne suis pas sûr que je vais le faire de manière aussi efficace que possible, bien que, et j'aimerais avoir quelques conseils sur les meilleures pratiques pour la récupération et la mise en forme des données. Mon Firebase référentiel ressemble à quelque chose comme ça....

-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) - ...

Ainsi, par exemple ici, je vais essayer d'obtenir toutes les données d'un scrutin de liste du sondage nom, c'est l'élection des noms, et le candidat noms et le nombre des suffrages à chaque élection. Je reçois les SONDAGES niveau DataSnapshot au cours de la OnCreate() fonction de mon activité principale c'est comme ça...

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);
                    }
                }

            }
        });
    }

Puis-je procéder à la lecture de chacun des éléments de données dont j'ai besoin successivement appel getValue() sur DataSnapshots, et de vérifier les clés de la 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");
                    }
                }
            };
        }
    }

Cela semble assez fastidieux façon de percer vers le bas à travers la structure de données, et je me demandais si il ya une meilleure façon.

J'ai vu le getValue(java.lang.Class<T> valueType) méthode dans la documentation, mais je n'ai pas été en mesure de le faire fonctionner dans mon cas, depuis que je travaille avec composé des objets, et pas seulement des conteneurs pour les types primitifs. Comment fonctionne la fonction de savoir ce que Firebase de données pour attribuer à laquelle les variables d'un objet de modèle? Est-elle adaptée Firebase clé de noms de variables membres, et donc ceux-ci doivent être exactement la même, la sensibilité à la casse? Comment traiter avec Firebase clé générée par des noms comme produit lorsque le poussant à un List? Comment construire des objets de modèle pour les composés objets?

OriginalL'auteur MassStrike | 2013-07-29