2017-08-27 5 views
0

Ich benutze Firebase-Datenbank für meine App und ich habe meine Benutzer darin gespeichert. Das ist mein UserInformation Klasse:Nullpointer Ausnahme beim Abrufen von Daten aus Firebase

public class UserInformation { 


private String email1; 
private String Password1; 
public HashMap<String, Boolean> SayingsLevels=new HashMap<>(); 
public HashMap<String, Boolean> songs=new HashMap<>(); 

public UserInformation (String email, String Password){ 
    this.email1=email; 
    this.Password1=Password; 
    SayingsLevels.put("1", false); 
    SayingsLevels.put("2", false); 
    SayingsLevels.put("3", false); 
    songs.put("1", false); 
    songs.put("2", false); 
    songs.put("3", false); 

} 

Und ich speicherte es mit diesem Code auf meiner Haupttätigkeit:

firebaseUser=FirebaseAuth.getInstance().getCurrentUser(); 
       UserInformation user=new UserInformation(email1,password1); 
       String id=firebaseUser.getUid(); 
       mDatabaseReference.child("user").child(id).setValue(user); 

Nun, ich die die hashmap Daten erhalten möchten, die in der Datenbank gespeichert wurde. habe ich den folgenden Code:

mDatabase.addValueEventListener(new ValueEventListener() { 

     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 

      mDatabase = FirebaseDatabase.getInstance().getReference(); 
      firebaseuser=FirebaseAuth.getInstance().getCurrentUser(); 
      id=firebaseuser.getUid(); 

      for(DataSnapshot dataSnapshot1: dataSnapshot.getChildren()){ 
       UserInformation user= dataSnapshot1.child("user").child(id).getValue(UserInformation.class); 

      } 

sondern auf variable Benutzer erhalte ich die ganze Zeit null, was ich falsch gemacht habe? Danke für Hilfe!

+0

Bitte teilen Sie uns Ihre Datenbank Struktur. –

+0

@Elior: Sie können diese Datenbankstruktur abrufen, indem Sie in Ihrer [Firebase-Datenbankkonsole] (https://console.firebase.google.com/project/_/database/data) auf den Link "JSON exportieren" klicken. Es als Text zu haben ist nützlicher als ein Screenshot. –

Antwort

1

Sie benötigen mDatabasevor einen Zuhörer, um es zu initialisieren Befestigung:

mDatabase = FirebaseDatabase.getInstance().getReference(); 
mDatabase.addValueEventListener(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     firebaseuser=FirebaseAuth.getInstance().getCurrentUser(); 
     id=firebaseuser.getUid(); 

     for(DataSnapshot dataSnapshot1: dataSnapshot.getChildren()){ 
      UserInformation user= dataSnapshot1.child("user").child(id).getValue(UserInformation.class); 

     } 

Aber beachten Sie, dass dieser Code die gesamte Datenbank zum Herunterladen wird, so die Daten für einen einzelnen Benutzer zu finden. Wenn die Nutzerbasis Ihrer App wächst, laden Sie immer mehr Daten herunter, die nicht benötigt werden.

ich nur empfehlen, die aktuellen Benutzerdaten wie das Herunterladen von:

mDatabase = FirebaseDatabase.getInstance().getReference(); 
firebaseuser=FirebaseAuth.getInstance().getCurrentUser(); 
id=firebaseuser.getUid(); 

mDatabase.child("users").child(id).addValueEventListener(new ValueEventListener() { 

    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     UserInformation user= dataSnapshot.getValue(UserInformation.class); 

Schließlich: Ich würde empfehlen, zu lernen, wie NullPointerException s zu beheben, indem diese und ähnliche Fragen zu studieren: What is a NullPointerException, and how do I fix it?

Verwandte Themen