2017-07-12 7 views
0

Database looks like this:Wert aus onDataChange erhalten?

Ich versuche Mail von Benutzername zu bekommen, so weit ich versuchte:

Der storageContainer Weg durch String-Variable auf MainActivity Klasse definieren und storageContainer Funktion in OnDataChange Funktion.

public void storageContainer(String mail){ 
    this.userMail = mail; 
} 

Dies ist die getMailByUsername Funktion:

public void getMailByUsername(String username){ 
    String user_mail; 
    mDatabase.child("Users").child(username).child("email").addListenerForSingleValueEvent(new ValueEventListener() { 
     String userMail; 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      userMail = dataSnapshot.getValue().toString(); 
      storageContainer(userMail); 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 
    }); 

} 
+0

Was genau ist dein Problem? –

+0

Ich versuche, dataSnapshot.getValue(). ToString() aus onDataChange Funktion:/aber ich denke ich kann nicht ... ich versuche, Benutzer Mail von dieser Datenbank und verwenden Sie es in logIn (String E-Mail, String-Passwort) Funktion –

Antwort

4

Um dies zu lösen, die Deklaration von String user_mail innerhalb der onDataChange() Methode zu bewegen, sonst wird es null sein. Dies geschieht aufgrund des asynchronen Verhaltens der onDataChange() Methode, die aufgerufen wird, bevor auch Ihre storageContainer() aufgerufen wird.

Das Verschieben der Deklaration innerhalb der Methode löst Ihr Problem. Verwenden Sie auch eine Log-Anweisung innerhalb der Methode wie folgt aus:

Log("TAG", userMail); 

Wenn Sie den Wert dieser String außerhalb dieses Verfahren verwenden möchten, nehmen Sie bitte einen Blick auf meine Antwort auf dieser post.

Ich hoffe, es hilft.