Сбой приложения при отправке рейтинга в Google Play
У меня есть некоторые проблемы с моим приложением для Android.
Я использую сервисы игровых игр Google с таблицами лидеров. Я импортирую все библиотеки, я делаю все, что нужно...
В своей основной деятельности я следую документации Google developper здесь и использую:
mClient.connect();
для связи, и это работает.
В конце игры я пытаюсь представить счет. Я видел на форумах, что я могу поместить mClient в статическое состояние, чтобы использовать его в другой деятельности. Поэтому я звоню в onCreate:
Games.Leaderboards.submitScore(MainActivity.mClient, getString(R.string.class_1), myscore);
Но приложение вылетает при отправке счета. У меня есть эти ошибки:
12-14 15:37:24.856: E/AndroidRuntime(19613): FATAL EXCEPTION: main
12-14 15:37:24.856: E/AndroidRuntime(19613): java.lang.RuntimeException: Unable to resume activity {com.test.app/com.test.app.Result}: java.lang.IllegalStateException: GoogleApiClient must be connected.
12-14 15:37:24.856: E/AndroidRuntime(19613): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2141)
12-14 15:37:24.856: E/AndroidRuntime(19613): at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2156)
12-14 15:37:24.856: E/AndroidRuntime(19613): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1680)
12-14 15:37:24.856: E/AndroidRuntime(19613): at android.app.ActivityThread.access$1500(ActivityThread.java:121)
12-14 15:37:24.856: E/AndroidRuntime(19613): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:943)
12-14 15:37:24.856: E/AndroidRuntime(19613): at android.os.Handler.dispatchMessage(Handler.java:99)
12-14 15:37:24.856: E/AndroidRuntime(19613): at android.os.Looper.loop(Looper.java:130)
12-14 15:37:24.856: E/AndroidRuntime(19613): at android.app.ActivityThread.main(ActivityThread.java:3701)
12-14 15:37:24.856: E/AndroidRuntime(19613): at java.lang.reflect.Method.invokeNative(Native Method)
12-14 15:37:24.856: E/AndroidRuntime(19613): at java.lang.reflect.Method.invoke(Method.java:507)
12-14 15:37:24.856: E/AndroidRuntime(19613): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)
12-14 15:37:24.856: E/AndroidRuntime(19613): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:624)
12-14 15:37:24.856: E/AndroidRuntime(19613): at dalvik.system.NativeStart.main(Native Method)
12-14 15:37:24.856: E/AndroidRuntime(19613): Caused by: java.lang.IllegalStateException: GoogleApiClient must be connected.
12-14 15:37:24.856: E/AndroidRuntime(19613): at com.google.android.gms.common.internal.o.a(Unknown Source)
12-14 15:37:24.856: E/AndroidRuntime(19613): at com.google.android.gms.games.Games.c(Unknown Source)
12-14 15:37:24.856: E/AndroidRuntime(19613): at com.google.android.gms.games.internal.api.LeaderboardsImpl.submitScore(Unknown Source)
12-14 15:37:24.856: E/AndroidRuntime(19613): at com.google.android.gms.games.internal.api.LeaderboardsImpl.submitScore(Unknown Source)
12-14 15:37:24.856: E/AndroidRuntime(19613): at com.test.app.Result.onResume(Result.java:129)
12-14 15:37:24.856: E/AndroidRuntime(19613): at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1150)
12-14 15:37:24.856: E/AndroidRuntime(19613): at android.app.Activity.performResume(Activity.java:3832)
12-14 15:37:24.856: E/AndroidRuntime(19613): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2131)
12-14 15:37:24.856: E/AndroidRuntime(19613): ... 12 more
В начале пишется "GoogleApiClient должен быть подключен", но "mClient" подключен. Поэтому я также пытаюсь отправить счет в MainActivity без mClient в статическом режиме, но также происходит сбой приложения.
1 ответ
Лучшая практика для управления клиентом Google API - для каждого действия поддерживать свое собственное состояние клиента. Посмотрите этот вопрос для более детального обсуждения: Доступ к клиенту Google Plus из нескольких действий.
Пользовательский опыт будет входить в "основное действие", а затем в действии в конце игры, проверять client.isConnected() (и вызывать connect, если не подключен), а затем после подключения отправлять счет. Таким образом, перед вызовом API вы убедитесь, что у вас есть действующий клиент.