web-dev-qa-db-fra.com

Firebase Android addListenerForSingleValueEvent ne renvoie parfois pas de données

Lorsque mon application démarre, je vérifie les détails de l'utilisateur actuel dans ma base de données Firebase (je stocke son uid pour cela).

J'attache addListenerForSingleValueEvent à la référence de l'utilisateur pour lire ses données.

Mon problème est que parfois, il ne renvoie aucune valeur, ni succès ni échec.

Seule la suppression des données de l'application permet de résoudre le problème, mais oblige bien entendu l'utilisateur à se connecter à nouveau.

J'ai lu quelques articles sur SO, mais je n'ai trouvé aucune solution.

Voici mon morceau de code:

DatabaseReference newUser =    
FirebaseDatabase.getInstance().getReference("users/"+uid);
newUser.addListenerForSingleValueEvent(new ValueEventListener()     
    @Override
    public void onDataChange(DataSnapshot snapshot) {}

    @Override
    public void onCancelled(DatabaseError databaseError) {}
});
11
Adi

La recommandation que j'ai vue à ce sujet est d'appeler keepSynced(true) sur l'objet Query.

5
John O'Reilly

Je suppose que user/:id n'existe pas. Vérifiez deux fois votre sortie d'erreur:

DatabaseReference newUser = FirebaseDatabase.getInstance()
    .getReference("users")
    .child(uid)
    .addListenerForSingleValueEvent(new ValueEventListener()     
        @Override
        public void onDataChange(DataSnapshot snapshot) {
            if (snapshot.exists()) {
                Log.i(TAG, snapshot.val());
            } else {
                Log.e(TAG, "Not found: " + uid);
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
            Log.e(TAG, databaseError.toString();
        }
    });
0
JP Ventura