Android getToken()方法引发IllegalStateException
我使用了Android getToken()方法引发IllegalStateException,android,google-signin,google-authentication,Android,Google Signin,Google Authentication,我使用了GoogleAppClient对象,继承了ConnectionCallbacks接口,并从两个不同的方法调用了GoogleAuthUtil.getToken(上下文上下文、字符串帐户名、字符串范围)。 1.重写onConnected()方法的ConnectionCallbacks接口 onClick()按钮的方法 在这两种方法中,我得到了不同的getToken()方法响应 从onConnected方法调用时:它会抛出类似java.lang的错误。IllegalStateException
GoogleAppClient
对象,继承了ConnectionCallbacks
接口,并从两个不同的方法调用了GoogleAuthUtil.getToken(上下文上下文、字符串帐户名、字符串范围)
。1.重写
onConnected()
方法的ConnectionCallbacks
接口
onClick()
按钮的方法getToken()
方法响应
onClick()
在主线程中执行。对吧?
onClick()方法:
@覆盖
公共void onClick(视图v){
getGoogleToken();
}
onConnected()方法:
@覆盖
未连接的公共空间(捆绑arg0){
getGoogleToken();
}
getGoogleToken()方法:
private void getGoogleToken(){
试一试{
AccountManager am=AccountManager.get(MainActivity.this);
Account[]accounts=am.getAccountsByType(GoogleAuthUtil.GOOGLE\u Account\u TYPE);
//检索google令牌
String token=GoogleAuthUtil.getToken(getApplicationContext(),帐户[0]。名称,私钥);//此行生成错误。
// ...
}捕获(例外情况除外){
例如printStackTrace();
}
}
这里是stackTrace:
01-25 17:53:02.700 23235-23235/num.app.gpluslogin W/System.err: java.lang.IllegalStateException: Calling this from your main thread can lead to deadlock
01-25 17:53:02.700 23235-23235/num.app.gpluslogin W/System.err: at com.google.android.gms.common.internal.zzx.zzcy(Unknown Source)
01-25 17:53:02.700 23235-23235/num.app.gpluslogin W/System.err: at com.google.android.gms.auth.GoogleAuthUtil.zza(Unknown Source)
01-25 17:53:02.700 23235-23235/num.app.gpluslogin W/System.err: at com.google.android.gms.auth.GoogleAuthUtil.getToken(Unknown Source)
01-25 17:53:02.700 23235-23235/num.app.gpluslogin W/System.err: at com.google.android.gms.auth.GoogleAuthUtil.getToken(Unknown Source)
01-25 17:53:02.700 23235-23235/num.app.gpluslogin W/System.err: at com.google.android.gms.auth.GoogleAuthUtil.getToken(Unknown Source)
01-25 17:53:02.700 23235-23235/num.app.gpluslogin W/System.err: at num.app.gpluslogin.MainActivity.getGoogleToken(MainActivity.java:274)
01-25 17:53:02.700 23235-23235/num.app.gpluslogin W/System.err: at num.app.gpluslogin.MainActivity.onConnected(MainActivity.java:207)
01-25 17:53:02.700 23235-23235/num.app.gpluslogin W/System.err: at com.google.android.gms.common.internal.zzk.zzk(Unknown Source)
01-25 17:53:02.700 23235-23235/num.app.gpluslogin W/System.err: at com.google.android.gms.internal.zzmg.zzi(Unknown Source)
01-25 17:53:02.700 23235-23235/num.app.gpluslogin W/System.err: at com.google.android.gms.internal.zzme.zzpi(Unknown Source)
01-25 17:53:02.701 23235-23235/num.app.gpluslogin W/System.err: at com.google.android.gms.internal.zzme.onConnected(Unknown Source)
01-25 17:53:02.701 23235-23235/num.app.gpluslogin W/System.err: at com.google.android.gms.internal.zzmi.onConnected(Unknown Source)
01-25 17:53:02.701 23235-23235/num.app.gpluslogin W/System.err: at com.google.android.gms.internal.zzlz.onConnected(Unknown Source)
01-25 17:53:02.702 23235-23235/num.app.gpluslogin W/System.err: at com.google.android.gms.common.internal.zzj$zzg.zzqv(Unknown Source)
01-25 17:53:02.702 23235-23235/num.app.gpluslogin W/System.err: at com.google.android.gms.common.internal.zzj$zza.zzc(Unknown Source)
01-25 17:53:02.702 23235-23235/num.app.gpluslogin W/System.err: at com.google.android.gms.common.internal.zzj$zza.zzv(Unknown Source)
01-25 17:53:02.702 23235-23235/num.app.gpluslogin W/System.err: at com.google.android.gms.common.internal.zzj$zzc.zzqx(Unknown Source)
01-25 17:53:02.702 23235-23235/num.app.gpluslogin W/System.err: at com.google.android.gms.common.internal.zzj$zzb.handleMessage(Unknown Source)
01-25 17:53:02.702 23235-23235/num.app.gpluslogin W/System.err: at android.os.Handler.dispatchMessage(Handler.java:102)
01-25 17:53:02.702 23235-23235/num.app.gpluslogin W/System.err: at android.os.Looper.loop(Looper.java:148)
01-25 17:53:02.702 23235-23235/num.app.gpluslogin W/System.err: at android.app.ActivityThread.main(ActivityThread.java:5417)
01-25 17:53:02.702 23235-23235/num.app.gpluslogin W/System.err: at java.lang.reflect.Method.invoke(Native Method)
01-25 17:53:02.702 23235-23235/num.app.gpluslogin W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
01-25 17:53:02.702 23235-23235/num.app.gpluslogin W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
01-25 17:53:09.358 1587-1605/system_process W/ActivityManager: Launch timeout has expired, giving up wake lock!
尝试在后台线程中执行下面的代码块
new Thread(new Runnable() {
public void run() {
android.os.Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND);
//Your code
try {
AccountManager am = AccountManager.get(MainActivity.this);
Account[] accounts = am.getAccountsByType(GoogleAuthUtil.GOOGLE_ACCOUNT_TYPE);
//Retrieve the google token
String token = GoogleAuthUtil.getToken(getApplicationContext(), accounts[0].name, PRIVATE_KEY); // This line generates error.
.......
.....
}catch(Exception ex)
{
ex.printStackTrace();}
}
}).start();
你在为谷歌注册做什么?是的。我正在这么做。我很想知道你为什么/如何使用GoogleAuthUtil而不是实际的Google登录SDK。。。我们打算反对GoogleAuthUtil@pratik03尝试使用IntentService替换线程,以改进上述代码