GameHelper 在 onConnectionFailed() 时崩溃。

8
我在GameHelper.java中遇到了以下崩溃:
[主线程] java.lang.NullPointerException at com.google.android.gms.common.ConnectionResult.startResolutionForResult(Unknown Source) at com.google.example.games.basegameutils.GameHelper.resolveConnectionResult(GameHelper.java:752) at com.google.example.games.basegameutils.GameHelper.onConnectionFailed(GameHelper.java:729)
我认为唯一可能发生这种情况的原因是在GameHelper.java的第752行,mActivity == null。
mConnectionResult.startResolutionForResult(mActivity, RC_RESOLVE);

mActivityonStop() 上得到了 null。 如果在 onStop() 调用后发生 onConnectionFailed(),是否可能是 GameHelper.java 有 bug 并会崩溃? 谢谢。

编辑: 这是在更新到最新的 Play API(rev 15)以及更新的 GameHelper.java 后发生的。


如果您在onStop()方法中将mActivity设置为null,那么如果在此之后调用startResolutionForResult(),可能会导致错误,但更可能的情况是mConnectionResult==null,这种情况可能吗? - Xander
如果mConnectionResult为空,它会在不同的行崩溃。 在我的onStop中,我调用GameHelper.onStop(),它将mActivity设置为null,除其他变量之外。resolveConnectionResult()没有检查这些变量,因此应用程序崩溃了。 这是在更新到最新的Play API(rev 15)以及更新的GameHelper.java之后发生的。 - ivy_the
1
这在我更新到2月24日的最新Google Play API后发生了。在错误消息中没有我的任何代码 :( - tjPark
2个回答

8

编辑:

这个问题现在已经在最新的GameHelper版本中得到了修复: https://github.com/playgameservices/android-samples/commit/e7b3758c136b5b434f1dfd9ca8c03f75aad70f09

旧回答:

对我来说,当Google Play服务要求我登录,并且我点击取消时,就会出现相同的错误。

因此,当你从自己的活动离开并进入登录活动时,它会分派停止事件,并因用户发起的过程而无法连接,这是可以解决的,因此就会出现错误。

因此,我的快速hack是改变:

catch (SendIntentException e)

简单来说

catch (Exception e)

因此,它也将捕获空指针异常。当然,在这种情况下,注册流程可能无法继续进行,因此我会在另一个操作上启动重新登录,并且目前似乎可以解决问题。

更彻底的解决方案可能是尝试在活动启动时解决结果,为此我们定义未决解决变量:

// Are we expecting the result of a resolution flow?
boolean mExpectingResolution = false;
boolean mPendingResolution = false;

然后在错误行,我们检查活动是否为非空。
if(mActivity != null)
    mConnectionResult.startResolutionForResult(mActivity, RC_RESOLVE);
else
    mPendingResolution = true;

在启动时,我们会检查并尝试解决它:

if(mPendingResolution && mConnectionResult != null)
try {
    mConnectionResult.startResolutionForResult(mActivity, RC_RESOLVE);
} catch (SendIntentException e) {
    e.printStackTrace();
}

这应该有所帮助,直到lib支持方官方解决该问题 :)

2
这是在提交 https://github.com/playgameservices/android-samples/commit/81ff43c 中重新引入的(由Wolff于2014年3月25日提交)。 - Andreyul

0

今天是2014年9月16日,我仍然面临这个问题。

我不知道为什么没有其他人回答如何评论GameHelper行。 在onStop方法中,有一行将mActivity变量设置为null。

我已经注释掉了这行(如下),我的应用程序正常工作。

  /** Call this method from your Activity's onStop(). */
public void onStop() {
    debugLog("onStop");
    assertConfigured("onStop");
    if (mGoogleApiClient.isConnected()) {
        debugLog("Disconnecting client due to onStop");
        mGoogleApiClient.disconnect();
    } else {
        debugLog("Client already disconnected when we got onStop.");
    }
    mConnecting = false;
    mExpectingResolution = false;



    // let go of the Activity reference
    //mActivity = null;  //COMMENT THIS LINE!!!!
    //COMMENT ABOVE LINE
}

这样做有什么问题吗?


我今天遇到了同样的问题。 - marty331
注释掉 mActivity=null 这行代码。就像我上面解释的那样。 - febaisi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接