15

、私たちのアプリは、この我々の使用に関する例外の多くは、11.0.2GMS IllegalStateException:結果はすでに設定されていますか?先週から

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) 

ファブリックにより、ログレポートをGMS起こります。

我々はfirebase使用したバージョンをGMSは、我々は、これらの問題をチェックしますかどのよう11.0.2

のですか?

と同じ問題GMSバージョン11.8.0

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) 
+0

この行をコードに追加してください: 'comile.android.gms:play-services:11.0.4''ドキュメントで[あなたのプロジェクトにGoogle Playサービスを追加する](https://developers.google.com/android/guides/setup#add_google_play_services_to_your_project)の手順を説明しています。また、[この投稿](https://productforums.google.com/forum/#!msg/tag-manager/NOlng117_2g/w46OkQS5Gm8J)を参照して、さらに参考にしてください。 –

+0

問題を解決しましたか? – Debugger

+0

あなたはこの問題のアップデートをお持ちですか?私は私のアプリ(プレイサービス11.6.2)で同じ問題を経験しました。 – Pat

答えて

0

に私はこのバグを解決していないが、私は生地を使用してUncaughtExceptionHandler .I'mでそれをキャッチしようとするので、私は生地の後MyUncaughtExceptionHandlerを登録しますこの問題を最初に処理するかどうかを判断することができます。私が見つけたらこの例外です。私はそれをキャッチします。

//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; 
} 
} 
+0

あなたは問題を解決しましたか? – Debugger

2

バグはまだ修正されていないので、BaseApplicationののonCreate()メソッドでhandleGMSException()を呼び出したり、独自のexceptionHandlerのを実装します。このハックはJaminの答えに基づいています。

private void handleGMSException() { 
    Thread.setDefaultUncaughtExceptionHandler((thread, throwable) -> { 
     if (!isGMSException(thread, throwable)) { 
      Thread.getDefaultUncaughtExceptionHandler().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; 
} 
+0

無限ループに入りますか? DefaultUncaughtExceptionHandlerはすでにカスタマイズされたものに変更されているため、Thread.getDefaultUncaughtExceptionHandler()。uncaughtException()は独自のメソッドを呼び出します。 – Hexise

0

このハックは、Jaminとdivonasの回答に基づいています。それはCrashlyticsで、そしてCrashlyticsなしで動作します。 Application onCreate()メソッドでこのメソッドを呼び出します。 Crashlyticsを使用している場合は、Crashlyticsを初期化した後でこのメソッドを呼び出します。ところで、スレッドIDは常に1になるとは限りません。

private Thread.UncaughtExceptionHandler mDefaultExceptionHandler; 
private long mUIThreadId; 

/** 
* Hack for gms bug https://issuetracker.google.com/issues/70416429 
* https://stackoverflow.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); 
     } 

    }); 
} 
関連する問題