Android 从onDataChange中获取价值?

Android 从onDataChange中获取价值?,android,database,firebase,firebase-realtime-database,Android,Database,Firebase,Firebase Realtime Database,我正在尝试通过用户名获取邮件,目前为止我尝试了: storageContainer方法是在MainActivity类上定义字符串变量,并在onDataChange函数中使用storageContainer函数 public void storageContainer(String mail){ this.userMail = mail; } 这是getMailByUsername函数: public void getMailByUsername(String username){

我正在尝试通过用户名获取邮件,目前为止我尝试了:

storageContainer
方法是在
MainActivity
类上定义字符串变量,并在onDataChange函数中使用storageContainer函数

public void storageContainer(String mail){
    this.userMail = mail;
}
这是
getMailByUsername
函数:

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) {

        }
    });

}

要解决此问题,请将
String user\u mail
的声明移动到
onDataChange()
方法中,否则它将为空。发生这种情况的原因是
onDataChange()
方法的异步行为,甚至在调用
storageContainer()
之前就调用了该方法

将声明移动到方法中,可以解决您的问题。在方法中也使用log语句,如下所示:

Log("TAG", userMail);

如果要在该方法之外使用该字符串的值,请查看我的答案。

要解决此问题,请将
String user\u mail
的声明移动到
onDataChange()
方法内,否则它将为空。发生这种情况的原因是
onDataChange()
方法的异步行为,甚至在调用
storageContainer()
之前就调用了该方法

将声明移动到方法中,可以解决您的问题。在方法中也使用log语句,如下所示:

Log("TAG", userMail);

如果您想在该方法之外使用该字符串的值,请查看我的答案。

您到底有什么问题?我正在尝试从onDataChange函数中获取dataSnapshot.getValue().toString():但我想我无法。。。我正在尝试从该数据库获取用户邮件,并在登录(字符串电子邮件、字符串密码)功能中使用它。您到底有什么问题?我正在尝试从onDataChange函数中获取dataSnapshot.getValue().toString():/但我想我无法。。。我试图从数据库中获取用户邮件,并在登录(字符串电子邮件,字符串密码)功能中使用它