注册后,我将进入下一个活动页面 正在显示欢迎信息的HomeActivity ...您已登录,当我登录时 单击“前进”按钮,发生错误,很遗憾 MyBooks已停止。为什么会这样呢?为什么会发生错误? 创建Intent是否有任何错误??
这是我的HomeActivity.java
package com.example.easylearn;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import com.google.firebase.auth.FirebaseAuth;
public class HomeActivity extends AppCompatActivity {
Button btngo;
FirebaseAuth mFirebaseAuth;
private FirebaseAuth.AuthStateListener mAuthStateListener;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
btngo = findViewById(R.id.go);
btngo.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intgo = new
Intent(HomeActivity.this,BranchActivity.class);
startActivity(intgo);
}
});
}
}
这是我的BranchActivity.java
package com.example.easylearn;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import com.google.firebase.auth.FirebaseUser;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.FirebaseAuth;
public class BranchActivity extends AppCompatActivity {
Button CSE;
Button ME;
Button Civil;
Button EE;
FirebaseAuth mFirebaseAuth;
private FirebaseAuth.AuthStateListener mAuthStateListener;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_branch);
mFirebaseAuth = FirebaseAuth.getInstance();
CSE = findViewById(R.id.button);
ME = findViewById(R.id.button4);
Civil = findViewById(R.id.button3);
EE = findViewById(R.id.button5);
CSE.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intCSE = new Intent(BranchActivity.this,YearActivity.class);
startActivity(intCSE);
}
});
ME.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intME = new Intent(BranchActivity.this,YearActivity.class);
startActivity(intME);
}
});
EE.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intEE = new Intent(BranchActivity.this,YearActivity.class);
startActivity(intEE);
}
});
Civil.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intCivil = new
Intent(BranchActivity.this,YearActivity.class);
startActivity(intCivil);
}
});
}
@Override
protected void onStart() {
super.onStart();
mFirebaseAuth.addAuthStateListener(mAuthStateListener);
}
}
答案 0 :(得分:2)
您正在呼叫:
mFirebaseAuth.addAuthStateListener(mAuthStateListener);
这意味着您要在用户的身份验证状态更改时要求Firebase调用mAuthStateListener
对象上的方法。但是您永远不会在代码中给mAuthStateListener
赋予任何值,所以它就是null
。当身份验证状态更改时,Firebase尝试调用mAuthStateListener.onAuthStateChanged
,这会导致您收到错误消息。
解决方案是正确实现auth状态更改侦听器,例如here。可能是这样的事情:
mFirebaseAuth.addAuthStateListener(new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth auth) {
if (auth.getCurrentUser() != null) {
...
}
}
});
在这种情况下,您甚至都不需要private FirebaseAuth.AuthStateListener mAuthStateListener;
字段。