首页 > 解决方案 > Java、Android、Firebase 身份验证登出抛出 NullPointerException

问题描述

我有一个带有电子邮件/密码 firebase 身份验证的应用程序。

它从登录活动开始

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);
    mAuth = FirebaseAuth.getInstance();
    ...

然后在我的onStart中,我检查currentuser是否不为空,然后它导航到我的主要活动。这部分工作得很好。

@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部分,我会得到同样的错误。

标签: javaandroidfirebasefirebase-authentication

解决方案


您正在注销方法中创建新的登录活动,这可能是一个问题吗?

在我看来,Auth 对象将在那里重新初始化。我的注销方式与您完全相同,但它在菜单的主要活动中

 case R.id.sign_out_menu:
            mFirebaseAuth.signOut();
            Auth.GoogleSignInApi.signOut(mGoogleApiClient);

推荐阅读