java - 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部分,我会得到同样的错误。
解决方案
您正在注销方法中创建新的登录活动,这可能是一个问题吗?
在我看来,Auth 对象将在那里重新初始化。我的注销方式与您完全相同,但它在菜单的主要活动中
case R.id.sign_out_menu:
mFirebaseAuth.signOut();
Auth.GoogleSignInApi.signOut(mGoogleApiClient);
推荐阅读
- android - Appium - 处理命令时发生未知的服务器端错误。原始错误:找不到automationName的驱动程序
- bigsql - 如何在 bigsql 中找到 YYYY_MM_DD 格式日期的天数差异?
- amazon-web-services - AWS Cloudformation:是否可以访问 Cloudformation 模板中的用户 ID?
- ios - 如何在自己的框架中使用第三方框架?(无伞式框架)
- dart - 在 PageView 中滚动多个页面更容易
- sql - 使用过滤器从范围内生成日期和时间
- batch-file - windows批处理中函数的局部变量和返回值
- java - 有没有办法找到集合的所有排列但某些元素会相互排斥
- sql - 在列中拆分行
- java - 如何从我插入 Listview 的数据中获取子节点?