2017-10-15 2 views
2

J'essaie d'obtenir un nombre simple à partir d'une base de données Firebase. J'ai une base de données qui s'appelle "disciples" il est structuré comme si ...Référence de l'objet null de la base de données Firebase

followers: { 
    {userID}: { 
     count: 5, 
     users: { {userID}: true, ... } 
    }, 
    ... 
} 

Simple droite. Donc, je veux obtenir l'objet "count", et éviter une référence d'objet nul quand ce "userID" n'existe pas. J'ai donc très simple (ou du moins je pensais que c'était) configuré pour que ...

DatabaseReference followersDB = FirebaseDatabase.getInstance().getReference("followers").child(user.getUid()).child("count"); 
followersDB.addListenerForSingleValueEven(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     if(dataSnapshot != null) { 
      int followersCount = dataSnapshot.getValue(Integer.class); 
      //put value in view; 
     } else { 
      //put 0 in view 
     } 
    } 
}); 

On pourrait penser que « si (dataSnapshot! = Null) » arrêterait d'obtenir une référence de valeur nulle , mais quand je lance mon application dans un émulateur je reçois ...

java.lang.NullPointerException: Tentative d'invoquer la méthode virtuelle « int java.lang.Integer.intValue() » sur une référence d'objet null

Pourquoi me donne-t-il encore un objet nul? nce si je teste "if (dataSnapshot! = null)"? Est-il possible de vérifier pour voir si la valeur est là avant de l'assigner? Je pensais que le si serait suffisant, mais apparemment ce n'est pas le cas. Merci pour votre temps et votre aide.

+0

Vous n'êtes jamais passé 'null' pour le' DataSnapshot 'paramètre. Pour vérifier si une valeur existe, utilisez 'dataSnapshot.exists()'. –

Répondre

3

Est-ce que cette façon:

DatabaseReference followersDB = FirebaseDatabase.getInstance().getReference("followers").child(user.getUid()); 
    followersDB.addListenerForSingleValueEven(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      if(dataSnapshot.child("users").exists()) { 
       int followersCount = dataSnapshot.child("count").getValue(Integer.class); 
       //put value in view; 
      } else { 
       //put 0 in view 
      } 
     } 
    }); 

Ce code implique que si vous avez des disciples, puis aller vérifier le nombre de tes followers