plus google android google-plus deadlock access-token

"Llamar a esto desde tu hilo principal puede provocar un interbloqueo y/o ANR al obtener accesoToken" de GoogleAuthUtil(integraciĆ³n de Google Plus en Android)



google++ (4)

En mi aplicación de Android, estoy tratando de obtener AccessToken de GoogleAuthUtil de la siguiente manera:

accessToken = GoogleAuthUtil.getToken (esto, mPlusClient.getAccountName (), "oauth2:" + SCOPES);

Pero en esta línea estoy obteniendo un error como el siguiente:

E / GoogleAuthUtil (4696): llamar a esto desde su hilo principal puede provocar un interbloqueo y / o ANR E / GoogleAuthUtil (4696): java.lang.IllegalStateException: llamar a este desde su hilo principal puede llevar al interbloqueo E / GoogleAuthUtil (4696) : en com.google.android.gms.auth.GoogleAuthUtil.b (Fuente desconocida) E / GoogleAuthUtil (4696): en com.google.android.gms.auth.GoogleAuthUtil.getToken (Fuente desconocida) E / GoogleAuthUtil (4696) : en com.google.android.gms.auth.GoogleAuthUtil.getToken (Fuente desconocida)

¿Alguna solución de este problema? Cualquier ayuda será apreciada.


E / GoogleAuthUtil (4696): java.lang.IllegalStateException: llamar a esto desde tu hilo principal puede provocar un interbloqueo

Parece que necesitas hacer eso en otro hilo, ¿lo has intentado?

Here puedes encontrar información sobre hilos en Android.


Pruébalo con una AsyncTask como esta:

AsyncTask<Void, Void, String> task = new AsyncTask<Void, Void, String>() { @Override protected String doInBackground(Void... params) { String token = null; try { token = GoogleAuthUtil.getToken( MainActivity.this, mGoogleApiClient.getAccountName(), "oauth2:" + SCOPES); } catch (IOException transientEx) { // Network or server error, try later Log.e(TAG, transientEx.toString()); } catch (UserRecoverableAuthException e) { // Recover (with e.getIntent()) Log.e(TAG, e.toString()); Intent recover = e.getIntent(); startActivityForResult(recover, REQUEST_CODE_TOKEN_AUTH); } catch (GoogleAuthException authEx) { // The call is not ever expected to succeed // assuming you have already verified that // Google Play services is installed. Log.e(TAG, authEx.toString()); } return token; } @Override protected void onPostExecute(String token) { Log.i(TAG, "Access token retrieved:" + token); } }; task.execute();

SCOPES es una lista separada por espacios de las cadenas de alcance de OAuth 2.0. Por ejemplo, SCOPES podría definirse como:

public static final String SCOPES = "https://www.googleapis.com/auth/plus.login " + "https://www.googleapis.com/auth/drive.file";

Estos representan los permisos que su aplicación le está solicitando al usuario. Los ámbitos solicitados en este ejemplo se documentan aquí:


Utilice hilo separado para su código de internet. El error indica que se está ejecutando un proceso que lleva más tiempo en la aplicación y aquí está Internet. Así que usa un hilo separado o una tarea asíncrona.

Echa un vistazo a este enlace NetworkOnMainThreadException

Espero que te ayude.


Thread CrearEventoHilo = new Thread(){ public void run(){ //do something that retrun "Calling this from your main thread can lead to deadlock" } }; CrearEventoHilo.start();

CrearEventoHilo.interrupt ();

public class Foo { MyThread mTh; void cantBeBothered() { mTh = new MyThread( /*...*/ ); mTh.run(); mTh.start(); } void imFinishedNowWaitingForThread() { mTh.join(); } void imOutKillingOffPendingThread() { mTh.interrupt(); } // ..... private class MyThread extends Thread { // ...; MyThread( /*...*/) { // this... = ...; } public void run() { doSomething( /*this...*/ ); } } }