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

时间:2016-09-26 15:39:56

标签: google-signin

我正在尝试使用Google登录来自GET /user/repos endpoint的Android应用。 我可以使用谷歌帐户成功登录&能够获取所有细节。但是,当我尝试注销时失败并出现以下错误:

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

我已经阅读了许多答案,建议在onCreate()中创建googleClientApi对象,这就是我正在做的事情。我已经为连接和暂停添加了回调,但是连接永远不会进入暂停模式。

以下是我的代码段:

  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对象时,它是从我用于注销的不同活动创建的。我不怀疑这是因为当加载活动时,googleApiClient上的isConnected返回true。但是,当我做一些UI动作(点击退出)时,它开始返回false。

1 个答案:

答案 0 :(得分:1)

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

最后我设法让它发挥作用。

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

API文档here表明它会通过调用onStart&amp;上的方法自动执行生命周期管理。 onStop of the activity。

因此,如果您想在不同的活动中使用相同的对象,那么您应该避免调用&#34; enableAutoManage&#34;并手动调用apiObject.connect(最好在onStart of activity中)和apiObject.disconnect()或logout(最好在onStop of activity中)。