使用 Google 注销 使用 java.lang.IllegalStateException 登录选项崩溃:GoogleApiClient 尚未连接

Signout with Google Sign-In option crashes with java.lang.IllegalStateException: GoogleApiClient is not connected yet

我正在尝试使用 Google 从 here 登录我的 android 应用程序。 我能够使用 google 帐户成功登录并能够获取所有详细信息。但是,每当我尝试注销时,它都会失败并出现以下错误:

              java.lang.IllegalStateException: GoogleApiClient is not connected yet.

我读过许多建议在 onCreate() 中创建 googleClientApi 对象的答案,这就是我的意思 doing.I 已添加连接和暂停的回调,但连接永远不会进入暂停模式。

以下是我的代码片段:

  public static void doInit(Context ctx, FragmentActivity fragmentActivity) { 

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

                mGoogleApiClient = new GoogleApiClient.Builder(ctx)
                .enableAutoManage(fragmentActivity , googleAuth)
                .addApi(Auth.GOOGLE_SIGN_IN_API, gso)
                .addConnectionCallbacks(googleAuth)
                .build();
    }

    public static Intent doGoogleLogIn() {
        return Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);
    }

    public static boolean doGoogleLogOut() {



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

                    }
                });
        return true;
    }
    @Override
    public void onConnectionFailed(ConnectionResult connectionResult) {
        // An unresolvable error has occurred and Google APIs (including Sign-In) will not
        // be available.
        Log.d("Signin", "onConnectionFailed:" + connectionResult);
    }

    @Override
    public void onConnected(@Nullable Bundle bundle) {
        System.out.println("Connected...");
    }

    @Override
    public void onConnectionSuspended(int i) {
        System.out.println("Suspened....");
    }

我唯一怀疑的是,当我登录并创建 googleApiClient 对象时,它是从我用于注销的那个不同的 activity 创建的。我不怀疑这是原因,因为当加载 activity 时,googleApiClient 上的 isConnected 返回 true。但是,当我执行一些 UI 操作(单击注销)时,它开始返回 false。

主要要求是从不同的活动中登录和注销。

我终于成功了。

错误的实际原因是 "enableAutoManage" 在构建客户端对象时调用。

API 文档 here 建议它将通过调用 activity.

的 onStart 和 onStop 上的方法自动进行生命周期管理

因此,如果您想在不同的活动中使用同一个对象,那么您应该避免调用 "enableAutoManage" 和调用 apiObject.connect(最好在 activity 的 onStart 中调用)和 apiObject.disconnect() 或手动注销(最好在 activity 的 onStop 中)。