GameHelper在onConnectionFailed()上崩溃

ivy*_*the 8 android google-play-games

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

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

我认为,可能发生的唯一原因是,如果mActivity == nullGameHelper.java:752:

mConnectionResult.startResolutionForResult(mActivity, RC_RESOLVE);
Run Code Online (Sandbox Code Playgroud)

mActivity获取null onStop() 是否可能GameHelper.java有bug并且如果onConnectionFailed()onStop()调用之后发生可能会崩溃?谢谢.

编辑:在更新到最新的Play API(rev 15)和更新的GameHelper.java之后发生了.

Art*_*ins 8

编辑:

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

老答案:

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

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

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

catch (SendIntentException e)
Run Code Online (Sandbox Code Playgroud)

简单地说

catch (Exception e)
Run Code Online (Sandbox Code Playgroud)

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

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

// Are we expecting the result of a resolution flow?
boolean mExpectingResolution = false;
boolean mPendingResolution = false;
Run Code Online (Sandbox Code Playgroud)

然后在错误行上检查activity是否为null

if(mActivity != null)
    mConnectionResult.startResolutionForResult(mActivity, RC_RESOLVE);
else
    mPendingResolution = true;
Run Code Online (Sandbox Code Playgroud)

在开始时我们检查并尝试解决它:

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

这应该有助于lib支持者的官方解决方案:)

  • 这是在提交https://github.com/playgameservices/android-samples/commit/81ff43c(Wolff的25.03.2014)中重新引入的 (2认同)