studio setup services play googleapis googleapiclient google gms android google-api-client

android - setup - googleapiclient python



Google Api Client en algĂșn momento NULL en onConnected (6)

Implemento GoogleApiClient como a continuación:

mGoogleApiClient = new GoogleApiClient.Builder(this) .enableAutoManage(this, 0 /* clientId */, this) .addApi(LocationServices.API) .addApi(Places.GEO_DATA_API) .addConnectionCallbacks(this) .build();

Pero en el método onConnected mGoogleApiClient => value null. En este caso, trato de reconstruir googleApiClient pero me sale un error:

java.lang.IllegalStateException: Already managing a GoogleApiClient with id 0

Por favor, ayúdeme a entender por qué mGoogleApiClient a veces es NULL aunque está conectado: |. (Notas. Revisé todo el código fuente, nunca configuré GoogleApiClient en NULL).

¡Gracias!

Actualizar

Mi problema ahora se resolvió después de intentar usar la última versión de play-service.

Gracias a todos por ayuda.


Creo que será mejor que mires esta referencia.

página de referencia de "público GoogleApiClient.Builder enableAutoManage"

En esta página se muestra que, a través de IllegalStateException si clientId ya se está administrando automáticamente. Por lo tanto, compruebe su código con

.enableAutoManage(this, 0 /* clientId */, this)

Creo que si la excepción en su código, podría devolver cero como no completado.


Si está enfrentando este problema cuando intenta reinicializar mGoogleApiClient, simplemente elimine

.enableAutoManage(this, 0 /* clientId */, this)

Utilizar

mGoogleApiClient = new GoogleApiClient.Builder(this) .addApi(LocationServices.API) .addApi(Places.GEO_DATA_API) .addConnectionCallbacks(this) .build();

y funcionará bien


Tuve el mismo problema (ya gestionaba un GoogleApiClient con id 0) en un fragmento, y finalmente lo resolví:

  • Sobrescribe onStart () y onStop normalmente
  • Agregue en onStop () esta llamada: "yourApiGoogle" .stopAutoManage (context);

Que tengas un buen día...


Yo tuve el mismo problema. Todo lo que hice para resolverlo es eliminar .enableAutoManage(this, 0 /* clientId */, this) porque simplemente no funciona correctamente de lo que asumí. Luego, anula estos métodos en tu actividad:

@Override public void onStart() { super.onStart(); if (mGoogleApiClient != null) { mGoogleApiClient.connect(); } } @Override public void onStop() { if (mGoogleApiClient != null && mGoogleApiClient.isConnected()) { mGoogleApiClient.disconnect(); } super.onStop(); }

Técnicamente, eso es lo que .enableAutoManage(this, 0 /* clientId */, this) , excepto que ahora, todo funciona como debería.


Documentation dice: En un momento dado, solo se permite un cliente administrado automáticamente por ID. Para reutilizar una identificación, primero debe llamar a stopAutoManage(FragmentActivity) en el cliente anterior.

Lo que hago personalmente es hacer una llamada al método de abajo antes de abandonar la actividad, en la que estoy utilizando el cliente de Google Api.

private void stopAutoManage() { if (mGoogleApiClient != null) mGoogleApiClient.stopAutoManage(mActivity); }


build() llama onConnected inmediatamente si ya está conectado. Por lo tanto, su variable podría ser nula.

Mejor uso

mGoogleApiClient = new GoogleApiClient.Builder(this) .enableAutoManage(this, 0 /* clientId */, this) .addApi(LocationServices.API) .addApi(Places.GEO_DATA_API) .addConnectionCallbacks(this); mGoogleApiClient.build();