从onDataChange中获取价值?

时间:2017-07-12 18:25:03

标签: android database firebase firebase-realtime-database

Database looks like this:

我试图通过用户名获取邮件,到目前为止我尝试过:

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

        }
    });

}

1 个答案:

答案 0 :(得分:4)

要解决此问题,请在String user_mail方法中移动onDataChange()的声明,否则它将为null。发生这种情况的原因是onDataChange()方法的异步行为,即使调用storageContainer()之前也会调用此方法。

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

Log("TAG", userMail);

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