我试图通过用户名获取邮件,到目前为止我尝试过:
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) {
}
});
}
答案 0 :(得分:4)
要解决此问题,请在String user_mail
方法中移动onDataChange()
的声明,否则它将为null。发生这种情况的原因是onDataChange()
方法的异步行为,即使调用storageContainer()
之前也会调用此方法。
在方法中移动声明,解决您的问题。在方法中也使用log语句,如下所示:
Log("TAG", userMail);
如果您想在该方法之外使用该字符串的值,请从post查看我的答案。