【问题标题】:App crashes when I try to logout当我尝试注销时应用程序崩溃
【发布时间】:2018-01-28 18:21:00
【问题描述】:

我正在开发一个应用程序,并且用户使用谷歌登录进行身份验证。 登录是完美的,但如果我使用

mAuth.signOut();

这会让我退出 firebase,而不是 google 帐户。当我尝试登录时,它使用我之前使用的帐户登录,我没有选择帐户的选项。 我按照谷歌文档注销用户并断开帐户。 我的按钮代码:

btnlogout.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View view) {
                 signOut();
             }
         });    

我的退出代码

private void signOut() {
        mGoogleSignInClient.signOut()
                .addOnCompleteListener(this, new OnCompleteListener<Void>() {
                    @Override
                    public void onComplete(@NonNull Task<Void> task) {
                        startActivity(new Intent(TempActivity.this,MainActivity.class));


                    }
                });
    }

按钮在 onCreate 里面。当我按下注销按钮时,我的应用程序崩溃了。有任何想法吗?调用signout时出现错误,java.lang.NullPointerException

【问题讨论】:

  • 请发布崩溃日志
  • java.lang.NullPointerException 这是我调用注销的行,mGoogleSignInClient.signout 行以及我声明公共类的开头。
  • 你在哪里初始化mGoogleSignInClient
  • 在发生登录的其他类 mGoogleSignInClient=GoogleSignIn.getClient(this,gso)
  • 您需要提供完整的崩溃堆栈跟踪。

标签: java android firebase


【解决方案1】:

您需要确保引用的是同一个 GoogleSignInClient 对象。在我看来,您在类中使用了另一个 GoogleSignInClient 对象来处理尚未初始化的注销,从而导致空指针异常。

GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
            .build();

mGoogleSignInClient = GoogleSignIn.getClient(this, gso);

然后,您需要在处理注销的类中使用对 mGoogleSignInClient 的相同引用。

【讨论】:

  • 将此代码添加到注销类,我没有收到任何错误,但它不会让我返回登录活动
  • 如果您想返回登录活动,您需要调用 startActivity(new Intent(currentActivity.this, loginActivity.class)) 并将 currentActivity 和 loginActivity 更改为您调用的任何内容,
  • 非常感谢,它成功了,我在 onStart() 中调用了它
猜你喜欢
  • 2017-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-03
  • 1970-01-01
  • 2019-07-05
  • 1970-01-01
  • 2020-02-07
相关资源
最近更新 更多