android - programacion - GMS IllegalStateException: ¿Ya se han establecido los resultados?
manual de programacion android pdf (3)
Como el error aún no se ha solucionado, llame a handleGMSException () en el método onCreate () de BaseApplication o implemente su propio ExceptionHandler. Este truco se basa en la respuesta de Jamin, actualizada en el comentario de Hexise.
private void handleGMSException() {
Thread.UncaughtExceptionHandler rootHandler = Thread.getDefaultUncaughtExceptionHandler();
Thread.setDefaultUncaughtExceptionHandler((thread, throwable) -> {
if (!isGMSException(thread, throwable)) {
rootHandler.uncaughtException(thread, throwable);
}
});
}
private boolean isGMSException(Thread thread, Throwable throwable) {
//Check if Main Thread.
if (throwable == null || thread.getId() == 1) return false;
if (throwable.getStackTrace() != null && throwable.getStackTrace().length > 0
&& throwable.getStackTrace()[0].toString().contains("com.google.android.gms")
&& throwable.getMessage().contains("Results have already been set")) {
return true;
}
return false;
}
Desde la semana pasada, nuestra aplicación tiene muchas excepciones sobre esto. Usamos GMS 11.0.2
Fatal Exception: java.lang.IllegalStateException: Results have already been set
at com.google.android.gms.common.internal.zzbo.zza(Unknown Source)
at com.google.android.gms.internal.zzbbl.setResult(Unknown Source)
at com.google.android.gms.internal.zzbbf.zzz(Unknown Source)
at com.google.android.gms.internal.zzbbf.zzf(Unknown Source)
at com.google.android.gms.internal.zzbbf.zzb(Unknown Source)
at com.google.android.gms.internal.zzbav.zza(Unknown Source:3)
at com.google.android.gms.internal.zzbdk.zzb(Unknown Source)
at com.google.android.gms.internal.zzbdk.zzrR(Unknown Source)
at com.google.android.gms.internal.zzbdk.onConnected(Unknown Source)
at com.google.android.gms.common.internal.zzaa.onConnected(Unknown Source)
at com.google.android.gms.common.internal.zzn.zzsR(Unknown Source:2)
at com.google.android.gms.common.internal.zze.zzy(Unknown Source)
at com.google.android.gms.common.internal.zzh.handleMessage(Unknown Source:4)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.os.HandlerThread.run(HandlerThread.java:61)
El informe de registro por tejido.
Usamos firebase y la versión gms es 11.0.2.
¿Cómo comprobamos estos problemas?
Y el mismo problema en la versión 11.8.0 de gms.
java.lang.IllegalStateException: Results have already been set
at com.google.android.gms.common.internal.zzbs.zza(Unknown Source)
at com.google.android.gms.common.api.internal.zzs.setResult(Unknown Source)
at com.google.android.gms.common.api.internal.zzm.zzy(Unknown Source)
at com.google.android.gms.common.api.internal.zzm.zzf(Unknown Source)
at com.google.android.gms.common.api.internal.zzm.zzb(Unknown Source)
at com.google.android.gms.common.api.internal.zzc.zza(Unknown Source:3)
at com.google.android.gms.common.api.internal.zzbr.zzb(Unknown Source)
at com.google.android.gms.common.api.internal.zzbr.zzakz(Unknown Source)
at com.google.android.gms.common.api.internal.zzbr.onConnected(Unknown Source)
Este hack se basa en la respuesta de Jamin y divonas. Funciona con Crashlytics y sin Crashlytics. Llame a este método en el método Application onCreate (). Si está utilizando Crashlytics, llame a este método después de que se haya inicializado Crashlytics. Por cierto, la identificación del hilo ui puede no ser siempre 1.
private Thread.UncaughtExceptionHandler mDefaultExceptionHandler;
private long mUIThreadId;
/**
* Hack for gms bug https://issuetracker.google.com/issues/70416429
* https://.com/questions/47726111/gms-illegalstateexception-results-have-already-been-set
*/
private void handleGMS70416429() {
mDefaultExceptionHandler = Thread.getDefaultUncaughtExceptionHandler();
mUIThreadId = Thread.currentThread().getId();
Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
@Override
public void uncaughtException(Thread t, Throwable e) {
if (e != null && t.getId() != mUIThreadId && e.getStackTrace() != null && e.getStackTrace().length > 0
&& e.getStackTrace()[0].toString().contains("com.google.android.gms")
&& e.getMessage() != null && e.getMessage().contains("Results have already been set")) {
return; // non-UI thread
}
if (mDefaultExceptionHandler != null)
mDefaultExceptionHandler.uncaughtException(t, e);
}
});
}
No he solucionado este error, pero trato de atraparlo con UncaughtExceptionHandler
Estoy usando la tela, por lo que registro MyUncaughtExceptionHandler después de la tela para que pueda determinar si manejar este problema primero. Si encuentro es esta excepción. Lo atraparé.
//try to catch some uncaught exception
public static boolean crashInterceptor(Thread thread, Throwable throwable) {
if (throwable == null || thread.getId() == 1) {
//Don''t intercept the Exception of Main Thread.
return false;
}
String classpath = null;
if (throwable.getStackTrace() != null && throwable.getStackTrace().length > 0) {
classpath = throwable.getStackTrace()[0].toString();
}
//intercept GMS Exception
if (classpath != null
&& throwable.getMessage().contains("Results have already been set")
&& classpath.contains("com.google.android.gms")) {
//CrashHelper.logNonFatalException();
return true;
}
return false;
}
}