Dans mon application Android, j'essaie d'obtenir AccessToken à partir de GoogleAuthUtil comme ci-dessous:
accessToken = GoogleAuthUtil.getToken (this, mPlusClient.getAccountName (), "oauth2:" + SCOPES);
Mais à cette ligne je reçois une erreur comme ci-dessous:
E/GoogleAuthUtil (4696): appeler ceci depuis votre thread principal peut conduire à un blocage et/ou à des ANR E/GoogleAuthUtil (4696): Java.lang.IllegalStateException: appeler ceci depuis votre thread principal peut conduire à un blocage .____.] E/GoogleAuthUtil (4696): sur com.google.Android.gms.auth.GoogleAuthUtil.b (Source inconnue) E/GoogleAuthUtil (4696): sur com.google.Android.gms. auth.GoogleAuthUtil.getToken (Source inconnue) E/GoogleAuthUtil (4696): sur com.google.Android.gms.auth.GoogleAuthUtil.getToken (Source inconnue)
Une solution à ce problème? Toute aide serait appréciée.
Essayez avec une AsyncTask comme ceci:
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
est une liste de chaînes de portée OAuth 2.0, séparées par un espace. Par exemple, SCOPES
pourrait être défini comme suit:
public static final String SCOPES = "https://www.googleapis.com/auth/plus.login "
+ "https://www.googleapis.com/auth/drive.file";
Celles-ci représentent les autorisations que votre application demande à l'utilisateur. Les portées demandées dans cet exemple sont documentées ici:
Utilisez un fil séparé pour votre code Internet. Une erreur indique que un processus plus long est en cours d'exécution dans l'application et ici, c'est Internet. Utilisez donc une tâche distincte ou une tâche asynchrone.
Consultez ce lien NetworkOnMainThreadException
J'espère que cela vous aidera.
E/GoogleAuthUtil (4696): exception Java.lang.IllegalStateException: appeler cette Depuis votre thread principal peut mener à un blocage
On dirait que vous devez le faire sur un fil séparé, avez-vous essayé?
Ici vous pouvez trouver des informations sur les discussions dans Android.
Thread CrearEventoHilo = new Thread(){
public void run(){
//do something that retrun "Calling this from your main thread can lead to deadlock"
}
};
CrearEventoHilo.start();
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...*/ );
}
}
}