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