简体   繁体   中英

IllegalStateException on sign to Google api client

I am getting the following error:

java.lang.IllegalStateException: Cannot use sign-in mode: SIGN_IN_MODE_OPTIONAL. Mode was already set to SIGN_IN_MODE_NONE 

What does this mean? How to prevent it?

The suggestion in other similar SO question was

 mGoogleApiClient.connect(GoogleApiClient.SIGN_IN_MODE_OPTIONAL);

But I have been using this itself.

Here is the 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();
    }
}

After the initial connection attempt if it was not successful then the googleApiClient.connect is reattempted in the onActivityResult . I believe this is reattempt is causing the problem. After initial connection failure / some user action makes the SIGN_IN_MODE_NONE.

How to handle this?

It looks like you're not allowed to provide a sign in mode to the connect(int) method more than once. The documentation says "It is an error to make multiple calls to this method passing different modes. Once a mode is selected, all future connect calls must use the same mode." So it might be that you're calling connect() with differing arguments. SIGN_IN_MODE_NONE doesn't seems to be an option for the parameter, so I think you're calling connect() in one case and connect(int) in another (with SIGN_IN_MODE_OPTIONAL ). Check that out and see if you can make them consistent.

Also, I believe callbacks for GoogleApiClient are onConnected(Bundle) and onConnectionFailed(ConnectionResult)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM