android - 如何在另一个Fragment中注销Google身份验证?

标签 android android-fragments firebase-authentication google-authentication

我正在使用 Google 身份验证登录。它将启动另一个 Java 的 Intent 。在此 fragment 中,我有一个退出按钮,但每次我想退出时,应用程序都会崩溃。 你们能帮我吗? :)

我收到的错误消息是:

java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.Context com.google.android.gms.common.api.GoogleApiClient.getContext()' on a null object reference

代码:

public class Setttings extends Activity {

private Button msigno;
private FirebaseAuth mAuth;

private GoogleApiClient mGoogleApiClient;

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.settings);


    DisplayMetrics dm = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(dm);

    int width = dm.widthPixels;
    int height = dm.widthPixels;

    getWindow().setLayout((int)(width*0.95),(int) (height*0.93));

    msigno = (Button) findViewById(R.id.signout);

    msigno.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            mAuth = FirebaseAuth.getInstance();

            switch (v.getId()) {
                // ...
                case R.id.signout:
                    signOut();
                    break;
                // ...

            }
            mAuth.signOut();

            // Google sign out
            Auth.GoogleSignInApi.signOut(mGoogleApiClient).setResultCallback(
                    new ResultCallback<Status>() {
                        @Override
                        public void onResult(@NonNull Status status) {
                        }
                    });
            Intent intent2 = new Intent(Setttings.this, MainActivity.class);
            startActivity(intent2);

        }
    });



}
private void signOut() {
    Auth.GoogleSignInApi.signOut(mGoogleApiClient).setResultCallback(
            new ResultCallback<Status>() {
                @Override
                public void onResult(Status status) {
                    // ...
                }
            });
}
}

最佳答案

需要初始化API客户端才能注销。

@Override
protected void onStart() {
    GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
            .requestEmail()
            .build();
    mGoogleApiClient = new GoogleApiClient.Builder(this)
            .addApi(Auth.GOOGLE_SIGN_IN_API, gso)
            .build();
    mGoogleApiClient.connect();
    super.onStart();
}

关于android - 如何在另一个Fragment中注销Google身份验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44653287/

相关文章:

unity-game-engine - Firebase 不在 Unity SDK 中创建用户

android - 为 Android NDK R10e 编译和使用 boost

javascript - "showkeyboard"事件来自哪里?

android - ViewPager 花时间加载包含 ListViews 的 fragment

api - 用于登录到我的 api 的 Firebase token

javascript - 尝试匿名登录 Firebase 时,对引荐来源网址的请求被阻止

java - 如何在不截断文件的情况下检查文件锁?

java - Android N : PrintManager. print() 导致 java.lang.IllegalStateException: Can print only from an activity

android - 实例变量在保留的 Fragment 中变为 null

Android FragmentStatePagerAdapter 在重新加载中间 fragment 时返回空白屏幕