5

Play マーケットにゲームがあり、メッセージとスタックトレースが返ってきました。

java.lang.IllegalStateException
Msg: (Not connected. Call connect() and wait for onConnected() to be called.)

java.lang.IllegalStateException
com.google.android.gms.internal.p.n(Unknown Source)
com.google.android.gms.internal.p.o(Unknown Source)
com.google.android.gms.internal.e.loadState(Unknown Source)
com.google.android.gms.appstate.AppStateClient.loadState(Unknown Source)
com.peerkesoftware.blockcrusher.CloudSave.load(CloudSave.java:31)
com.peerkesoftware.blockcrusher.CloudSave.setAppStateClient(CloudSave.java:26)
com.peerkesoftware.blockcrusher.MorburActivity.onSignInSucceeded(MorburActivity.java:475)
com.peerkesoftware.libgeneric.app.game.GameHelper.succeedSignIn(GameHelper.java:652)
com.peerkesoftware.libgeneric.app.game.GameHelper.connectNextClient(GameHelper.java:539)
com.peerkesoftware.libgeneric.app.game.GameHelper.onConnected(GameHelper.java:642)
com.google.android.gms.internal.p.k(Unknown Source)
com.google.android.gms.internal.bj.k(Unknown Source)
com.google.android.gms.internal.p$f.a(Unknown Source)
com.google.android.gms.internal.p$f.a(Unknown Source)
com.google.android.gms.internal.p$b.p(Unknown Source)
com.google.android.gms.internal.p$a.handleMessage(Unknown Source)
android.os.Handler.dispatchMessage(Handler.java:99)
android.os.Looper.loop(Looper.java:132)
android.app.ActivityThread.main(ActivityThread.java:4126)
java.lang.reflect.Method.invokeNative(Native Method)
java.lang.reflect.Method.invoke(Method.java:491)
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:844)
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:602)
dalvik.system.NativeStart.main(Native Method)

奇妙なことに、connect() を呼び出して onConnected() を待つ必要があるというメッセージが表示されます。しかし、スタックトレースでわかるように、呼び出しは onConnected() から来ています。Google Play サービスが接続されていることは確かです。IllegalStateException がまだ発生するのはなぜですか? 意味がわかりません。

4

2 に答える 2

3

APIを正しく使用してもandroid.gms.internalがIllegalStateExceptionをスローする場合があります。たとえば、以下のトレースは、すべてのクライアントが接続したことを記録しており、コードへの Google の successSignIn() コールバックを処理しているときに例外が発生します。(SwGameHelper は Google の GameHelper コードのコピーです)

gms.internal スタック トレースには、「signOut」という名前のメソッドがいくつか含まれているように見えることに注意してください。したがって、これはGoogleコードのバグである可能性がありますが、接続直後に接続が失われる競合状態であると思います. 私は他の接続されたサービスで同様のレースに対処しなければなりませんでした. それがレースの場合、グーグルは、呼び出したときに接続していたとしても、メソッドによってこの例外がスローされる可能性があることをより適切に文書化する必要があるかもしれません.

これをキャッチする回避策を検討しています。良い修正を見つけたら更新します。

これは、インストール済みのお客様で最も一般的なクラッシュ バグの 1 つであり、それほどまれではありません。

onConnected: connected! client=1 com.lootworks.swords.screens.SwGameHelper
Connecting PlusClient. com.lootworks.swords.screens.SwGameHelper
onConnected: connected! client=2 com.lootworks.swords.screens.SwGameHelper
All clients now connected. Sign-in successful. com.lootworks.swords.screens.SwGameHelper
All requested clients connected. Sign-in succeeded! com.lootworks.swords.screens.SwGameHelper

java.lang.IllegalStateException: Not connected. Call connect() and wait for onConnected() to be called.
    at com.google.android.gms.internal.p.n(Unknown Source)
    at com.google.android.gms.internal.p.o(Unknown Source)
    at com.google.android.gms.internal.bj.a(Unknown Source)
                                       loadAchievements
                                       b
                                       a
                                       signOut
                                       a
                                       a
    at com.google.android.gms.games.GamesClient.loadAchievements(Unknown Source)
                                             signOut
    at com.lootworks.swords.social.SwAchievementManager.loadAndUploadAchievements(SourceFile:441)
    at com.lootworks.swords.activity.SwMap3D.onSignInSucceeded(SourceFile:3526)
    at com.lootworks.swords.screens.SwGameHelper.succeedSignIn(SourceFile:639)
    at com.lootworks.swords.screens.SwGameHelper.connectNextClient(SourceFile:530)
    at com.lootworks.swords.screens.SwGameHelper.onConnected(SourceFile:629)
    at com.google.android.gms.internal.p.k(Unknown Source)
    at com.google.android.gms.internal.bj.k(Unknown Source)
    at com.google.android.gms.internal.p$f.a(Unknown Source)
    at com.google.android.gms.internal.p$f.a(Unknown Source)
    at com.google.android.gms.internal.p$b.p(Unknown Source)
    at com.google.android.gms.internal.p$a.handleMessage(Unknown Source)
    at android.os.Handler.dispatchMessage(Handler.java:99)
于 2013-07-20T17:30:48.430 に答える