【问题标题】:How to solve Attempt to invoke virtual method 'void com.google.firebase.auth.FirebaseAuth.signOut()' on a null object reference?如何解决尝试在空对象引用上调用虚拟方法“void com.google.firebase.auth.FirebaseAuth.signOut()”?
【发布时间】:2016-09-28 18:19:55
【问题描述】:

我有两个活动(mainactivitymain2activity)。我从 GitHub Firebase 登录演示中获得了 Google 登录代码。在使用 Google 登录时,它会重定向到第二个活动,即导航抽屉活动,在抽屉中,我将 SignOut 放置在它给我错误的位置:

Attempt to invoke virtual method 'void com.google.firebase.auth.FirebaseAuth.signOut()' on a null object reference

mainactivity中的SignOut方法是

public void signOut() {
    // Firebase sign out
    mAuth.signOut();
    LoginManager.getInstance().logOut();
    // Google sign out
    Auth.GoogleSignInApi.signOut(mGoogleApiClient).setResultCallback(
            new ResultCallback<Status>() {
                @Override
                public void onResult(@NonNull Status status) {
                    updateUI(null);
                }
            });
}

这就是我调用方法的方式:

MainActivity ma = new MainActivity();
ma.signOut();

如何从抽屉退出?

【问题讨论】:

  • 永远,永远,永远做一个new Activity(); ...无论如何,修复错误。你需要初始化mAuth

标签: android firebase firebase-authentication


【解决方案1】:

切勿使用 new 创建 Activity。活动只能由框架创建。您应该有一个登录时的登录实例,使用它。

【讨论】:

  • 我没明白为什么我不应该创建活动?这很糟糕吗?
  • 因为它们不会被正确初始化。框架需要初始化它们,否则它们实际上是无效的。它的方式是通过 startActivity。
  • 登录后返回,存储生成的身份验证令牌。呼叫注销。
猜你喜欢
  • 2019-09-21
  • 2018-08-18
  • 2021-08-30
  • 2019-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多