Java 尝试登录时Firebase.AuthSateListener未运行

Java 尝试登录时Firebase.AuthSateListener未运行,java,android,firebase,firebase-authentication,Java,Android,Firebase,Firebase Authentication,我正在为学校制作一个基本的信息应用程序,我正在尝试使用firebase身份验证来允许用户登录到他们的帐户 我希望任何人都能阅读我的代码,指出任何明显的错误,或者告诉我,如果我能做些什么来解决这个问题,因为我不知道它出了什么问题 private FirebaseAuth mAuth; public static final String TAG = "MainActivity"; @Override protected void onCreate(Bundle savedInstanceStat

我正在为学校制作一个基本的信息应用程序,我正在尝试使用firebase身份验证来允许用户登录到他们的帐户

我希望任何人都能阅读我的代码,指出任何明显的错误,或者告诉我,如果我能做些什么来解决这个问题,因为我不知道它出了什么问题

private FirebaseAuth mAuth;
public static final String TAG = "MainActivity";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Button btnSubmitLoginPage = (Button) findViewById(R.id.btnSubmitLoginPage);
    final EditText edtUsernameLoginPage = (EditText) findViewById(R.id.edtUsernameLoginPage);
    final EditText edtPasswordLoginPage = (EditText) findViewById(R.id.edtPasswordLoginPage);

    btnSubmitLoginPage.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            showToast("1");
            FirebaseAuth.AuthStateListener mAuthStateListener = new FirebaseAuth.AuthStateListener() {
                @Override
                public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
                    showToast("2");
                    Authenticate(edtUsernameLoginPage, edtPasswordLoginPage, txtErrorLoginPage);
                }
            showToast("14")
            };

        }
    });
} //end of main activity

private void Authenticate(EditText edtUsernameLoginPage, EditText edtPasswordLoginPage, final TextView txtErrorLoginPage) {
    showToast("3");
    if (mAuth.getCurrentUser() != null) {
        showToast("You are logged in");
        showToast("4");
    } else {
        showToast("5");
        String strUsername = edtUsernameLoginPage.getText().toString();
        String strPassword = edtPasswordLoginPage.getText().toString();
        if (strUsername.isEmpty()) {
            txtErrorLoginPage.setText("Username is empty");
            showToast("6");
        } else if (strPassword.isEmpty()) {
            txtErrorLoginPage.setText("Password is empty");
            showToast("7");
        } else if (strPassword.isEmpty() && strUsername.isEmpty()) {
            txtErrorLoginPage.setText("Both are empty");
            showToast("8");
        } else if (!(strPassword.isEmpty() && strUsername.isEmpty())) {
            showToast("9");
            mAuth.createUserWithEmailAndPassword(strUsername, strPassword).addOnCompleteListener(MainActivity.this, new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    showToast("10");
                    if (!task.isSuccessful()) {
                        showToast("11");
                        txtErrorLoginPage.setText("Login was Unsuccesful");
                    } else {
                        showToast("12");
                        updateUI();
                    }
                }
            });
        }
    }
}

private void showToast(String msg) {
    Toast toast = Toast.makeText(getApplicationContext(), msg, Toast.LENGTH_SHORT);
    toast.show();
} //end of showToast

private void updateUI() {
    //go to student info page when sign in is correct
    showToast("13");
    Intent i = new Intent(getApplicationContext(), StudentInfoPage.class);
    startActivity(i);
} //end of updateUI
私有FirebaseAuth mAuth;
公共静态最终字符串TAG=“MainActivity”;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
按钮btnSubmitLoginPage=(按钮)findViewById(R.id.btnSubmitLoginPage);
最终EditText edtUsernameLoginPage=(EditText)findViewById(R.id.edtUsernameLoginPage);
最终EditText edtPasswordLoginPage=(EditText)findViewById(R.id.edtPasswordLoginPage);
btnSubmitLoginPage.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
showtoots(“1”);
FirebaseAuth.AuthStateListener mAuthStateListener=新的FirebaseAuth.AuthStateListener(){
@凌驾
AuthStateChanged上的公共void(@NonNull FirebaseAuth FirebaseAuth){
showtoots(“2”);
验证(edtUsernameLoginPage、edtPasswordLoginPage、txtErrorLoginPage);
}
showtoots(“14”)
};
}
});
}//主要活动结束
私有无效身份验证(EditText-edtUsernameLoginPage、EditText-edtPasswordLoginPage、最终文本视图txtErrorLoginPage){
showtoots(“3”);
if(mAuth.getCurrentUser()!=null){
showToast(“您已登录”);
showtoots(“4”);
}否则{
showtoots(“5”);
字符串strUsername=edtUsernameLoginPage.getText().toString();
字符串strPassword=edtPasswordLoginPage.getText().toString();
if(strUsername.isEmpty()){
setText(“用户名为空”);
showtoots(“6”);
}else if(strPassword.isEmpty()){
setText(“密码为空”);
showtoots(“7”);
}else if(strPassword.isEmpty()&&strUsername.isEmpty()){
setText(“两者都是空的”);
showtoots(“8”);
}else if(!(strPassword.isEmpty()&&strUsername.isEmpty()){
showtoots(“9”);
mAuth.createUserWithEmailAndPassword(strUsername,strPassword).addOnCompleteListener(MainActivity.this,newOnCompleteListener()){
@凌驾
未完成的公共void(@NonNull任务){
showtoots(“10”);
如果(!task.issusccessful()){
showtoots(“11”);
setText(“登录失败”);
}否则{
showtoots(“12”);
updateUI();
}
}
});
}
}
}
私有void showtoos(字符串msg){
Toast Toast=Toast.makeText(getApplicationContext(),msg,Toast.LENGTH\u SHORT);
toast.show();
}//表演结束
私有void updateUI(){
//登录正确后,转到学生信息页面
showtoots(“13”);
Intent i=新的Intent(getApplicationContext(),studentInfo.class);
星触觉(i);
}//更新结束
}


当我在模拟器中运行应用程序并输入用户电子邮件和密码并单击提交按钮时,它不会执行FirebaseAuth.AuthStateListener,即“showtoos(“1”);”之间的任何代码以及"showtoots("14)"。如果执行该代码,则应运行updateUI()函数并转到另一页。

您尚未初始化FirebaseAuth对象。。。 在使用FirebaseAuth对象之前

 protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);

           // ADD THIS LINE BEFORE YOU USE THE mAuth Object
            mAuth = FirebaseAuth.getInstance();


}
实际上,您正在尝试将AuthStateListener添加到FirebaseAuth的未初始化对象,我想这会给您一个空指针异常


希望这能解决问题。

您的代码创建了一个身份验证状态侦听器,但从未将其附加到任何内容。这就解释了为什么侦听器从未被调用

FirebaseAuth.AuthStateListener mAuthStateListener = new FirebaseAuth.AuthStateListener() {
    @Override
    public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
        showToast("2");
        Authenticate(edtUsernameLoginPage, edtPasswordLoginPage, txtErrorLoginPage);
    }
    showToast("14")
};
FirebaseAuth.getInstance().addAuthStateListener(mAuthStateListener);

旁注:我只是把它放在
onCreate
btnSubmitLoginPage.setOnClickListener
之外。Firebase会在应用程序重新启动时自动恢复用户的身份验证状态,因此在许多情况下,用户以前的登录将被选中,而无需单击按钮。

请说明有什么问题?