【问题标题】:GameHelper crashes on onConnectionFailed()GameHelper 在 onConnectionFailed() 上崩溃
【发布时间】:2014-03-27 23:00:42
【问题描述】:

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

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

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

mConnectionResult.startResolutionForResult(mActivity, RC_RESOLVE);

mActivityonStop() 上为空 如果在调用onStop() 之后发生onConnectionFailed(),GameHelper.java 是否可能存在错误并且可能崩溃? 谢谢。

编辑: 它发生在更新到最新的 Play API(第 15 版)以及更新的 GameHelper.java 之后。

【问题讨论】:

  • 如果您在onStop() 方法中将mActivity 设置为null,那么是的,如果您在那之后调用startResolutionForResult(),这可能会导致错误,但在我看来更有可能是mConnectionResult==null,这可能吗?
  • 如果 mConnectionResult 为 null,它将在不同的行上崩溃。在我的停止中,我调用 GameHelper.onStop() ,它将 mActivity 除了其他变量设置为空。 resolveConnectionResult() 不检查这些并且应用程序崩溃。它发生在更新到最新的 Play API(第 15 版)以及更新的 GameHelper.java 之后。
  • 在我从 2 月 24 日更新到最新的 Google Play API 之后,这发生在我身上。在错误消息中,没有我的任何代码:(

标签: android google-play-games


【解决方案1】:

编辑:

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

旧答案:

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

所以当你离开自己的activity去登录activity时,它会派发onStop事件,并且由于用户发起的进程而无法连接,这是可以解决的,因此发生了错误。

所以我的快速技巧正在改变:

catch (SendIntentException e)

简单的

catch (Exception e)

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

更彻底的 hack 可能是尝试在活动开始时解决结果,为此我们定义了待处理的解决变量:

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

然后在错误行我们检查activity是否不为null

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】:

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

我不知道为什么其他人没有回答关于评论 GameHelper 行的问题。 在 onStop 方法中有一行将 mActivity 变量设置为空。

我评论了这一行(如下所示),我的应用程序运行正常。

  /** 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
}

这样做有什么问题吗:?

【讨论】:

  • 我今天也遇到了同样的问题。
  • 注释 mActivity=null 行。就像我上面的解释一样。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-10
  • 2018-11-01
  • 1970-01-01
  • 2011-07-24
  • 2011-09-18
  • 2016-06-02
相关资源
最近更新 更多