La récupération de données à partir de Firebase en temps réel de la Base de données sous Android

Je suis nouveau sur Firebase et NoSQL. J'ai un Android Démo, avec une Ville de saisie semi-automatique de Champ de Texte dans lequel je veux peupler les villes que j'ai depuis mon Firebase DB, tout en tapant.

{   "cities":{
        "Guayaquil":true,
        "Gualaceo":true,
        "Quito":true,
        "Quevedo":true,
        "Cuenca":true,
        "Loja":true,
        "Ibarra":true,
        "Manta":true
    }
}

C'est ce que j'ai jusqu'à présent.

Comment puis-je récupérer à partir de la DB villes qui commencent par une lettre (de saisie au clavier)? Si je commence à taper "G", je veux recevoir "Guayaquil" et "Gualaceo".

Si j'utilise orderByValue retourne toujours un vide instantané.

Si j'utilise orderByKey retour de l'ensemble de la liste.

    Query citiesQuery = databaseRef.child("cities").startAt(input).orderByValue();
    citiesQuery.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            List<String> cities = new ArrayList<String>();
            for (DataSnapshot postSnapshot: dataSnapshot.getChildren()) {
                cities.add(postSnapshot.getValue().toString());
            }

Remarque: Si vous pouvez recommander une meilleure structure de données, vous êtes les bienvenus.

Quelles sont les dimensions de cette base de données des villes? Serait-il plausible pour votre application de lecture dans la base de données une fois dans une copie locale (comme un tableau de quelque sorte), puis utiliser la logique pour afficher uniquement les valeurs appropriées tout en tapant?
Initialement, il sera autour de 10, mais vous pouvez l'augmenter jusqu'à 100.Je voulais que cette fonctionnalité soit "en ligne", donc je ne peux ajouter de nouvelles villes sans avoir besoin de les stocker localement
Oh c'est bon. Aussi loin que le processeur et réseau de 100 petites chaînes est pratiquement rien, donc il va certainement être rapide. Permettez-moi de clarifier ce que je veux dire par les stocker localement. Je veux dire dans la mémoire lors de l'exécution, c'est tout. Je ne veux pas dire stocker une copie dans les dispositifs de stockage ou quelque chose comme ça. Tout ce que je veux dire c'est, lisez les villes dans un tableau et ensuite travailler avec ce tableau pour afficher les données. Lorsque les modifications de base de données, vous pouvez très facilement mettre à jour le tableau presque instantanément, mais je doute que cela va changer souvent. Découvrez ma réponse pour une explication un peu plus de ce que je pensais.
Comme une note, dans ma réponse, vous pouvez prendre le mot "unique" de l'écouteur d'événement et qui permettra de faire en temps réel. Puis il suffit d'ajouter cityList.clear() avant la boucle et puis à chaque fois que vos modifications de base de données l'ensemble de votre liste de tableaux sera actualisé.

OriginalL'auteur Erick Medina | 2016-09-27