2016-07-22 11 views
1

I am getting Folgender error:IllegalStateException auf sign zu Google api client

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

Was does diese mean? Wie man es verhindert?

Der Vorschlag, in anderen ähnlichen SO Frage war

mGoogleApiClient.connect(GoogleApiClient.SIGN_IN_MODE_OPTIONAL); 

Aber ich habe dies selbst im Einsatz.

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

Nach dem ersten Verbindungsversuch, wenn es nicht erfolgreich war, dann die googleApiClient.connect im onActivityResult erneut versucht wird. Ich glaube, das ist ein erneuter Versuch, der das Problem verursacht. Nach einem anfänglichen Verbindungsfehler/einer Benutzeraktion wird SIGN_IN_MODE_NONE ausgeführt.

Wie geht das?

Antwort

0

Es sieht so aus, als ob Sie der connect (int) -Methode nicht mehrmals einen Anmelde-Modus zur Verfügung stellen können. Die documentation sagt "Es ist ein Fehler, mehrere Aufrufe an diese Methode durch die Übergabe verschiedener Modi. Sobald ein Modus ausgewählt ist, müssen alle zukünftigen Verbindungsanrufe den gleichen Modus verwenden." So könnte es sein, dass Sie connect() mit unterschiedlichen Argumenten aufrufen. SIGN_IN_MODE_NONE scheint keine Option für den Parameter zu sein, so denke ich, Sie rufen connect() in einem Fall und connect(int) in einem anderen (mit). Überprüfen Sie das und sehen Sie, ob Sie sie konsistent machen können.

Ich glaube auch, Rückrufe für GoogleApiClient sind onConnected(Bundle) und onConnectionFailed(ConnectionResult)

+0

wie ein plausibler Grund scheint. Aber hier ist eine Anweisung für 'public void connect (int signInMode)'. Gemäß der Dokumentation: Es ist ein Fehler, mehrere Aufrufe dieser Methode zu machen, die verschiedene Modi übergeben. Sobald ein Modus ausgewählt ist, müssen alle zukünftigen Verbindungsanrufe denselben Modus verwenden. Wie hat sich dann der Modus zu 'SIGN_IN_MODE_NONE' geändert? – suku

+0

Ich denke es liegt daran, dass Sie 'public void connect()' vor 'public void connect (int)' aufrufen, da 'SIGN_IN_MODE_NONE' keine Option als Parameter ist. Suchen Sie danach und wählen Sie entweder Modus keine oder Modus optional. Ich denke der andere SO Post, auf den Sie sich beziehen, ist [dies] (http://stackoverflow.com/questions/36063607/google-signin-not-working). Ich bin mir nicht sicher, ob Sie versuchen, sich wie er anzumelden, aber für mein Login habe ich dies in meinem 'onConnectionFailedListener':' result.startResolutionForResult (MainActivity.this, REQUEST_LOGIN); 'Das öffnete den Login-Dialog –

+0

Ja, ich bezog sich auf diese Frage SO. Ich hatte 'result.startResolutionForResult' aber immer noch diesen Fehler. Leider war der Fehler zu meinem Ende nie reproduzierbar, aber die Absturzberichte von Kunden zeigten es. Ich habe versucht, die Callbacks erneut zu registrieren und dann wieder 'googleApiClient.connect (GoogleApiClient.SIGN_IN_MODE_OPTIONAL)'. Ich habe noch keinen Absturzbericht erhalten, aber es sind frühe Tage. Kann nicht bestätigen, wie dies das Problem verhindert. – suku