2016-07-22 2 views
1

я получаю следующее сообщение об ошибке:IllegalStateException по знаку апи клиента Google

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

Что это значит? Как предотвратить это?

Предложение в других аналогичных SO вопрос был

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

После первоначальной попытки соединения, если она не была успешной, то googleApiClient.connect является повторной попыткой в ​​onActivityResult. Я считаю, что это повторная попытка вызывает проблему. После первоначального сбоя подключения/некоторые действия пользователя делают SIGN_IN_MODE_NONE.

Как с этим справиться?

ответ

0

Похоже, вам не разрешено предоставлять режим входа в метод connect (int) более одного раза. В documentation говорится: «Это ошибка, заключающаяся в том, что несколько вызовов этого метода передают разные режимы. После выбора режима все последующие вызовы для подключения должны использовать один и тот же режим». Возможно, вы звоните connect() с разными аргументами. SIGN_IN_MODE_NONE, похоже, не является параметром для параметра, поэтому я думаю, что вы вызываете connect() в одном случае и connect(int) в другом (с SIGN_IN_MODE_OPTIONAL). Проверьте это и посмотрите, можете ли вы сделать их согласованными.

Кроме того, я считаю, обратные вызовы для GoogleApiClient являются onConnected(Bundle) и onConnectionFailed(ConnectionResult)

+0

кажется правдоподобной причины. Но вот инструкция для 'public void connect (int signInMode)'. В соответствии с документацией: ошибка заключается в том, чтобы сделать несколько вызовов этого метода, передавая разные режимы. После выбора режима все последующие вызовы соединения должны использовать один и тот же режим. Как изменился режим на 'SIGN_IN_MODE_NONE'. – suku

+0

Я думаю, это потому, что вы вызываете 'public void connect()' перед 'public void connect (int)', поскольку 'SIGN_IN_MODE_NONE' не является параметром в качестве параметра. Посмотрите на это и выберите либо режим, либо режим. Я предполагаю, что другое сообщение SO, о котором вы говорите, [this] (http://stackoverflow.com/questions/36063607/google-signin-not-working). Я не уверен, что вы пытаетесь войти в систему, как он, но для моего входа я поместил это в свой 'onConnectionFailedListener':' result.startResolutionForResult (MainActivity.this, REQUEST_LOGIN); 'Это выскочил диалог входа в систему –

+0

Да I имел в виду этот вопрос. У меня был 'result.startResolutionForResult', но он все еще получал эту ошибку. К сожалению, эта ошибка никогда не воспроизводилась в моем конце, но отчеты о сбоях, отправленные от клиентов, показали ее. Я попытался перерегистрировать обратные вызовы, а затем снова 'googleApiClient.connect (GoogleApiClient.SIGN_IN_MODE_OPTIONAL)'. Я еще не получил отчета о сбоях, но это ранние дни. Не удается подтвердить, как это предотвращает проблему. – suku

Смежные вопросы