我正在使用Google登录使用Firebase身份验证,但我想从其他活动注销,但是当我使用此方法注销时,该方法可以完全从同一个活动中运行,但不能与其他活动一起使用。这是方法。
public void logOut() {
mAuth.signOut();
// Google sign out
Auth.GoogleSignInApi.signOut(googleApiClient).setResultCallback(
new ResultCallback<Status>() {
@Override
public void onResult(@NonNull Status status) {
authorizeUser(null);
}
});
}
但是当将此方法设为静态且googleApiClient为静态时,它仍然无法正常工作,而且只执行
FirebaseAuth.getInstance().signOut();
我得到的错误是这个(logcat)
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.igov, PID: 21316
java.lang.IllegalStateException: GoogleApiClient is not connected yet.
at com.google.android.gms.internal.zzoe.zzd(Unknown Source)
at com.google.android.gms.internal.zzoh.zzd(Unknown Source)
at com.google.android.gms.internal.zzof.zzd(Unknown Source)
at com.google.android.gms.auth.api.signin.internal.zzc.signOut(Unknown Source)
at com.igov.design.LoginActivity.logOut(LoginActivity.java:159)
at com.igov.design.LoginActivity$2.onClick(LoginActivity.java:62)
at android.view.View.performClick(View.java:5198)
at com.igov.design.MainActivity.onNavigationItemSelected(MainActivity.java:101)
at android.support.design.widget.NavigationView$1.onMenuItemSelected(NavigationView.java:152)
at android.support.v7.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:810)
at android.support.v7.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:152)
at android.support.v7.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:957)
at android.support.design.internal.NavigationMenuPresenter$1.onClick(NavigationMenuPresenter.java:318)
at android.view.View.performClick(View.java:5198)
at android.view.View$PerformClick.run(View.java:21147)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
答案 0 :(得分:20)
向Google Api客户端注册连接回调
使用的课程:
<强>代码:强>
public void logout() {
mGoogleApiClient.connect();
mGoogleApiClient.registerConnectionCallbacks(new GoogleApiClient.ConnectionCallbacks() {
@Override
public void onConnected(@Nullable Bundle bundle) {
FirebaseAuth.getInstance().signOut();
if(mGoogleApiClient.isConnected()) {
Auth.GoogleSignInApi.signOut(mGoogleApiClient).setResultCallback(new ResultCallback<Status>() {
@Override
public void onResult(@NonNull Status status) {
if (status.isSuccess()) {
Log.d(TAG, "User Logged out");
Intent intent = new Intent(LogoutActivity.this, LoginActivity.class);
startActivity(intent);
finish();
}
}
});
}
}
@Override
public void onConnectionSuspended(int i) {
Log.d(TAG, "Google API Client Connection Suspended");
}
});
}
答案 1 :(得分:0)
如果您使用的是使用google的登录名并从其他活动中注销,并且遇到此错误(尤其是在注销时),请检查此行(如果您在代码中找到了它,然后将其删除)。
mGoogleApiClient = GoogleApiClient.Builder(this)
/*this line should be removed*/.enableAutoManage(this , this)
.addApi(Auth.GOOGLE_SIGN_IN_API, gso)
.build()