GameHelper在onConnectionFailed()上崩溃

时间:2014-02-25 15:37:48

标签: android google-play-games

我在GameHelper.java中遇到了以下崩溃:

  

[main] java.lang.NullPointerException at   com.google.android.gms.common.ConnectionResult.startResolutionForResult(未知   来源)at   com.google.example.games.basegameutils.GameHelper.resolveConnectionResult(GameHelper.java:752)     在   com.google.example.games.basegameutils.GameHelper.onConnectionFailed(GameHelper.java:729)

我认为可能发生的唯一原因是mActivity == null GameHelper.java:752

mConnectionResult.startResolutionForResult(mActivity, RC_RESOLVE);

mActivityonStop()上变为空 是否有可能GameHelper.java有错误,如果onConnectionFailed()在调用onStop()后发生,可能会崩溃? 感谢。

EDITED: 它发生在更新到最新的Play API(rev 15)和更新的GameHelper.java之后。

2 个答案:

答案 0 :(得分:8)

编辑:

现在已经修复了最新的GameHelper版本: https://github.com/playgameservices/android-samples/commit/e7b3758c136b5b434f1dfd9ca8c03f75aad70f09

老答案:

对我而言,它发生在应用程序的开头,当Google Play服务要求我登录时,如果我点击取消,则会发生同样的错误。

因此,当您从自己的活动离开登录活动时,它会调度onStop事件,并且由于用户启动的进程(可解析)而无法连接,因此会发生错误。

所以我的快速黑客正在改变:

catch (SendIntentException e)

简单地

catch (Exception e)

所以它也会捕获Null指针异常 当然,在这种情况下,注册过程可能不会继续,所以我在另一个动作上启动重新登录,它现在似乎有效。

更彻底的黑客攻击可能会尝试解决活动开始时的结果,因为我们定义了未决的解决方案变量:

// 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支持者的正式决议:)

答案 1 :(得分: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
}

这样做有什么问题:?