2017-10-15 5 views
2

Ich versuche, eine einfache Nummer aus einer Firebase-Datenbank zu erhalten. Ich habe eine Datenbank, die "Anhänger" genannt wird, ist es so strukturiert ...Firebase-Datenbank null Objektreferenz

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

Einfach richtig. Ich möchte also das "count" -Objekt abrufen und eine Null-Objektreferenz vermeiden, wenn diese "userID" nicht existiert. So habe ich ein sehr einfaches (oder zumindest dachte ich, es war) Setup für die ...

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

Man würde denken, dass die „if (dataSnapshot! = Null)“ würde aus stoppt einen Nullwert getting aber, wenn ich betreibe meine App in einem Emulator ich ...

java.lang.NullPointerException: Der Versuch, virtuelle Methode aufzurufen 'int java.lang.Integer.intValue()' auf ein null-Objekt Referenz

Warum gibt es mir immer noch eine Null-Objekt-Referenz nce wenn ich auf "if (dataSnapshot! = null)" teste? Gibt es eine Möglichkeit, vor der Zuweisung zu prüfen, ob der Wert vorhanden ist? Ich dachte, das wäre genug, aber anscheinend ist es nicht. Danke für deine Zeit und Hilfe.

+0

Sie bestanden nie 'null' für die' DataSnapshot 'Parameter. Um zu überprüfen, ob ein Wert existiert, verwenden Sie 'dataSnapshot.exists()'. –

Antwort

3

es auf diese Weise tun:

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

Dieser Code bedeutet, dass, wenn Sie irgendwelche Follower haben, dann gehen Sie und überprüfen Sie die Zahl Ihrer Anhänger

Verwandte Themen