我有一个带有电子邮件/密码firebase身份验证的应用。
它从登录活动开始
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
mAuth = FirebaseAuth.getInstance();
...
然后在我的onStart中,检查当前用户是否为null,然后导航到我的主要活动。这部分工作得非常好。
@Override
public void onStart() {
super.onStart();
FirebaseUser currentUser = mAuth.getCurrentUser();
if (currentUser != null) {
goMain();
}
}
问题就出现了,在主要活动中我有一个按钮,我从LoginActivity.java调用了注销函数:
public void logOut() {
LoginActivity login = new LoginActivity();
login.logMeOut();
}
public void logMeOut() {
FirebaseUser user = mAuth.getCurrentUser();
if(user!=null) {
mAuth.signOut();
Intent intent = new Intent(this, LoginActivity.class);
startActivity(intent);
}
}
问题是当logMeOut运行时,我得到了这个美丽
java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法'com.google.firebase.auth.FirebaseUser com.google.firebase.auth.FirebaseAuth.getCurrentUser()'
我试图将mAuth = FirebaseAuth.getInstance()
添加到logMeOut函数的开头,但仍然没有解决我的问题。
如果我只调用mAuth.signOut()
,没有FirebaseUser部分,我会得到同样的错误。
您在注销方法中创建新的登录活动可能是个问题吗?
在我看来,Auth对象将在那里重新初始化。我以与您完全相同的方式进行注销,但它位于菜单中的主要活动中
case R.id.sign_out_menu:
mFirebaseAuth.signOut();
Auth.GoogleSignInApi.signOut(mGoogleApiClient);