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():/但我想我无法。。。我试图从数据库中获取用户邮件,并在登录(字符串电子邮件,字符串密码)功能中使用它