Android 登录到Google api客户端时出现非法状态异常
我得到以下错误:Android 登录到Google api客户端时出现非法状态异常,android,google-api,google-fit,Android,Google Api,Google Fit,我得到以下错误: java.lang.IllegalStateException: Cannot use sign-in mode: SIGN_IN_MODE_OPTIONAL. Mode was already set to SIGN_IN_MODE_NONE 这是什么意思?如何预防 其他类似问题中的建议是: mGoogleApiClient.connect(GoogleApiClient.SIGN_IN_MODE_OPTIONAL); 但我一直在用这个 这是onActivityRes
java.lang.IllegalStateException: Cannot use sign-in mode: SIGN_IN_MODE_OPTIONAL. Mode was already set to SIGN_IN_MODE_NONE
这是什么意思?如何预防
其他类似问题中的建议是:
mGoogleApiClient.connect(GoogleApiClient.SIGN_IN_MODE_OPTIONAL);
但我一直在用这个
这是onActivityResult
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_OAUTH) {
authInProgress = false;
if (resultCode == RESULT_OK) {
progressDialog.dismiss();
if (!googleApiClient.isConnecting() && !googleApiClient.isConnected()) {
googleApiClient.connect(GoogleApiClient.SIGN_IN_MODE_OPTIONAL);
} else {
onConnected(null);
}
} else if (resultCode == RESULT_CANCELED) {
progressDialog.dismiss();
startApiClientConnect();
}
} else {
progressDialog.dismiss();
startApiClientConnect();
}
}
初始连接尝试后,如果未成功,则会在onActivityResult
中重新尝试GoogleAppClient.connect
。我相信这是重新尝试造成的问题。初始连接失败后/某些用户操作使符号\u处于\u模式\u无
如何处理此问题?似乎不允许您多次向connect(int)方法提供登录模式。“通过不同的模式对此方法进行多次调用是错误的。一旦选择了一种模式,以后所有的连接调用都必须使用相同的模式。”因此,可能是您使用不同的参数调用了
connect()
SIGN\u IN_MODE\u NONE
似乎不是参数的选项,因此我认为您在一种情况下调用了connect()
,在另一种情况下调用了connect(int)
(使用SIGN\u IN_MODE\u OPTIONAL
)。检查一下,看看你是否能让它们保持一致
另外,我认为GoogleAppClient的回调是
onConnected(Bundle)
和onConnectionFailed(ConnectionResult)
似乎不允许多次向connect(int)方法提供登录模式。“通过不同的模式对此方法进行多次调用是错误的。一旦选择了一种模式,以后所有的连接调用都必须使用相同的模式。”因此,可能是您使用不同的参数调用了connect()
SIGN\u IN_MODE\u NONE
似乎不是参数的选项,因此我认为您在一种情况下调用了connect()
,在另一种情况下调用了connect(int)
(使用SIGN\u IN_MODE\u OPTIONAL
)。检查一下,看看你是否能让它们保持一致
此外,我认为对GoogleAppClient的回调是
onConnected(Bundle)
和onConnectionFailed(ConnectionResult)
似乎是一个合理的原因。但是这里有一个关于公共void connect(int-signimode)
的语句。根据文档:通过不同模式多次调用此方法是错误的。一旦选择了一种模式,以后的所有连接呼叫都必须使用相同的模式。那么模式是如何变为“无模式下的签名”的呢?我想这是因为您在公共无效连接(int)之前调用了public void connect()
,因为无模式下的签名不是一个参数选项。查找并选择无模式或可选模式。我猜你提到的另一个帖子是。我不确定您是否试图像他一样登录,但对于我的登录,我将其放入我的onConnectionFailedListener
:result.startResolutionForResult(main activity.this,REQUEST\u login)代码>弹出登录对话框是的,我指的是那个问题。我确实有result.startResolutionForResult
,但仍收到此错误。不幸的是,这一错误在我这边永远无法重现,但从客户发送的崩溃报告中可以看出。我已尝试重新注册回调,然后再次GoogleAppClient.connect(GoogleAppClient.SIGN\u IN\u MODE\u可选)
。我还没有收到任何撞车报告,但时间还早。无法确认这是如何防止问题的。顺便说一句,我总是使用GoogleAppClient.connect(GoogleAppClient.SIGN\u IN\u MODE\u可选)代码>贯穿整个代码。我还注册了OnConnectionFailedListener
和ConnectionCallbacks
。所以这不再是问题了?似乎是个合理的原因。但是这里有一个关于公共void connect(int-signimode)
的语句。根据文档:通过不同模式多次调用此方法是错误的。一旦选择了一种模式,以后的所有连接呼叫都必须使用相同的模式。那么模式是如何变为“无模式下的签名”的呢?我想这是因为您在公共无效连接(int)之前调用了public void connect()
,因为无模式下的签名不是一个参数选项。查找并选择无模式或可选模式。我猜你提到的另一个帖子是。我不确定您是否试图像他一样登录,但对于我的登录,我将其放入我的onConnectionFailedListener
:result.startResolutionForResult(main activity.this,REQUEST\u login)代码>弹出登录对话框是的,我指的是那个问题。我确实有result.startResolutionForResult
,但仍收到此错误。不幸的是,这一错误在我这边永远无法重现,但从客户发送的崩溃报告中可以看出。我已尝试重新注册回调,然后再次GoogleAppClient.connect(GoogleAppClient.SIGN\u IN\u MODE\u可选)
。我还没有收到任何撞车报告,但时间还早。无法确认这是如何防止问题的。顺便说一句,我总是使用GoogleAppClient.connect(GoogleAppClient.SIGN\u IN\u MODE\u可选)代码>贯穿整个代码。我还注册了OnConnectionFailedListener
和ConnectionCallbacks
,所以这不再是问题了?