2013-06-13 14 views
5

私はPlay Marketでゲームをしており、メッセージとスタックトレースを取得しました。Google PlayゲームサービスのIllegalStateExceptionは意味がありません

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を取得しますか?私は意味をなさない。

+0

コードなしで、{dis、}そこに同意することは困難です;) – fge

+0

あなたはおそらく正しいでしょう。私はここでどのコードを共有するのが合理的であるかを確認します。 –

答えて

1

私はアプリを開発していたときと似たような痕跡を見ました。最初はすべてがうまくいっていると思いました。しかし、GameHelperコードを詳しく見てみると、クライアントを接続していないことが分かり、IllegalStateExceptionは実際には正確です。

6月16日16:33:00.562:D/ian_(3181):ONSTART:接続しているクライアント

これが成功した接続の私のトレースがなどが見えるものです。

06-16 16:33:00.902:D/ian_(3181):GamesClientを接続しています。

06-16 16:33:03.282:D/ian_(3181):onConnected:connected!クライアント= 1

06-16 16:33:03.292:D/ian_(3181):すべてのクライアントが接続しました。サインインに成功しました。

06-16 16:33:03.292:D/ian_(3181):要求されたすべてのクライアントが接続されています。サインインに成功しました!

6月16日16:33:03.292:D/ian_(3181):MultiTab1これは役立つ

ホープonSignInSucceeded。がんばろう !

+0

あなたの答えをありがとう。私はlogcatをチェックします。私が持っている問題は、スタックトレースがフィールドのインストールから戻ってくることだけです。私は自分でそれを再現したことはありません。 –

3

APIを正しく使用しても、android.gms.internalがIllegalStateExceptionをスローすることがあります。例えば。すべてのクライアントが接続するログの下のトレースは、私たちがその例外を取得したコードへのgoogleのsucceedSignIn()コールバックを処理している間です。 (SwGameHelperはGoogleのGameHelperコードのコピーです)

gms.internalスタックトレースには、「signOut」という名前のメソッドがいくつか含まれているようです。だからこれはGoogleコードのバグかもしれませんが、私の推測では、接続直後に接続が失われている競合状態です。私は、他の接続されたサービスで同様のレースに対処しなければなりませんでした。レースの場合、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) 
+1

投稿してから3ヶ月(すごい)です。これはまだ定期的に発生します。私はそれがgoogleの再生サービスライブラリのコードのバグだと思う。私たちのインストールの約1%は、サインインと接続に成功した直後にゲームサービスにアクセスすると接続されないというバグがあります。その短時間(通常200ms)の遅延で実際に接続が切断されることはあまりにも頻繁に起こります。最新のgoogle playサービスのlibに更新しました。変更はありません。私たちの回避策は、例外をキャッチして静かに放棄することです。 Googleの誰かが興味を持っているなら、ヒントヒントをたくさん提供することができます: – mwk

関連する問題