我正在尝试使用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。
答案 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中)。