java应用程序在提交分数排行榜Google Play时崩溃
我的安卓应用程序有一些问题
我在排行榜上使用google play games服务。我导入所有库,我做所有需要的
在我的主要活动中,我遵循Google Developer文档here,并使用:
mClient.connect();
为连接和工作
在游戏结束时,我尝试提交分数。我在论坛上看到,我可以将McClient设置为静态,以便在其他活动中使用它。所以我调用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 安卓.app.ActivityThread.performResumeActivity(ActivityThread.java:2141)
12-14 15:37:24.856: E/AndroidRuntime(19613): at 安卓.app.ActivityThread.handleResumeActivity(ActivityThread.java:2156)
12-14 15:37:24.856: E/AndroidRuntime(19613): at 安卓.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1680)
12-14 15:37:24.856: E/AndroidRuntime(19613): at 安卓.app.ActivityThread.access$1500(ActivityThread.java:121)
12-14 15:37:24.856: E/AndroidRuntime(19613): at 安卓.app.ActivityThread$H.handleMessage(ActivityThread.java:943)
12-14 15:37:24.856: E/AndroidRuntime(19613): at 安卓.os.Handler.dispatchMessage(Handler.java:99)
12-14 15:37:24.856: E/AndroidRuntime(19613): at 安卓.os.Looper.loop(Looper.java:130)
12-14 15:37:24.856: E/AndroidRuntime(19613): at 安卓.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.安卓.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)
12-14 15:37:24.856: E/AndroidRuntime(19613): at com.安卓.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.安卓.gms.common.internal.o.a(Unknown Source)
12-14 15:37:24.856: E/AndroidRuntime(19613): at com.google.安卓.gms.games.Games.c(Unknown Source)
12-14 15:37:24.856: E/AndroidRuntime(19613): at com.google.安卓.gms.games.internal.api.LeaderboardsImpl.submitScore(Unknown Source)
12-14 15:37:24.856: E/AndroidRuntime(19613): at com.google.安卓.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 安卓.app.Instrumentation.callActivityOnResume(Instrumentation.java:1150)
12-14 15:37:24.856: E/AndroidRuntime(19613): at 安卓.app.Activity.performResume(Activity.java:3832)
12-14 15:37:24.856: E/AndroidRuntime(19613): at 安卓.app.ActivityThread.performResumeActivity(ActivityThread.java:2131)
12-14 15:37:24.856: E/AndroidRuntime(19613): ... 12 more
开始时,它写“GoogleAppClient必须连接”,但“McClient”已连接。 因此,我也尝试在MainActivity中提交分数,但静态中没有mClient,但应用程序也会崩溃
# 1 楼答案
管理GoogleAPI客户端的最佳实践是让每个活动都保持自己的客户端状态。有关更详细的讨论,请参见此问题:Access google plus client from multiple activities
用户体验将在“主活动”上登录,然后在游戏结束时的活动中检查客户端。isConnected()(如果未连接,则调用connect),然后在连接后提交分数。这样,您将确保在调用API之前拥有有效的客户端