第一次加载后,Turnbased匹配消失

时间:2015-04-22 17:40:24

标签: android google-play-services google-play-games

我正在使用Google Play服务开发适用于Android的游戏,以创建基于回合的匹配。

起初一切都很好我使用

为已登录的用户加载了turnbased匹配
Games.TurnBasedMultiplayer.loadMatchesByStatus(getApiClient(),
        new int[]{TurnBasedMatch.MATCH_TURN_STATUS_MY_TURN,
                TurnBasedMatch.MATCH_TURN_STATUS_THEIR_TURN,
                TurnBasedMatch.MATCH_TURN_STATUS_INVITED,
                TurnBasedMatch.MATCH_TURN_STATUS_COMPLETE})
        .setResultCallback(this);

它总是加载任何给定状态的所有匹配。但是从上周末开始回调,但是没有匹配,因为我没有参加任何比赛(状态响应没问题)。我在手机上删除了Google Play服务的缓存,然后重新启动了该设备。在那一刻,所有比赛再次显示,直到我下次打开应用程序。所有比赛都失踪了。 一旦我开始新的比赛,比赛将继续显示上述方法(刷新列表),直到我关闭应用程序。在下一次发布时,比赛也消失了。

我不得不说游戏尚未发布,但在Google Play开发者控制台的测试阶段。我在模拟器上发现了同样的问题。它运行良好几天,但突然遇到了与我的真实设备相同的问题(后来的构建,所以不是单个代码更改导致这一点)。

是否有其他人注意到此行为或对如何解决此问题有所了解?

可能与多个应用程序连接到一个游戏有关吗?我有两个连接调试证书签名的应用程序,今天下午为签名的apk添加了一个。当我使用签名的apk时,它再次起作用,直到我部署了一个新的测试应用程序(debug signed)。切换回已签名的apk后,错误仍然存​​在。

由于似乎没有人知道答案让我重新解释这个问题。我应该自己在设备上缓存TurnBasedMatches吗?我刚刚删除了播放服务缓存并重新打开了我的应用程序。结果?数百个游戏的列表(因为我每次测试时都必须开始一个新游戏......)

我处理loadMatchesResult的代码

@Override
public void onResult(TurnBasedMultiplayer.LoadMatchesResult loadMatchesResult)
{
    showToast("GotMatches status: " + loadMatchesResult.getStatus().getStatusCode());

    //add matches to listview (only caching matchId, no references to turnbasedmatch)

    loadMatchesResult.getMatches().getMyTurnMatches().close();
    loadMatchesResult.getMatches().getInvitations().close();
    loadMatchesResult.getMatches().getTheirTurnMatches().close();
    loadMatchesResult.getMatches().getCompletedMatches().close();
    loadMatchesResult.release();

}

找到了另一个兴趣点..当开始向设备部署新的apk时,它开始看起来像问题...一旦我部署新的apk(通过从谷歌播放安装alpha版本或从Android Studio直接调试版本)比赛都没了。当我没有更改apk时,我可以重新启动手机/关闭应用程序,它运行正常...

如果我通过Play商店更新应用程序也会出现问题......应该有更多人遇到此问题!

2 个答案:

答案 0 :(得分:1)

来自https://developer.android.com/reference/com/google/android/gms/common/api/PendingResult.html#setResultCallback(com.google.android.gms.common.api.ResultCallback

  

使用await()检索结果或传递给结果回调后,尝试再次检索结果是错误的。调用者或回调接收者有责任释放与返回结果相关的任何资源。某些结果类型可能实现Releasable,在这种情况下,应使用release()来释放相关资源。

检索结果后,当您尝试再次获取结果时会出现错误,直到您释放与返回结果相关联的资源,这就是为什么清除缓存会使它们再次可见。您还需要访问设备的缓存并显示结果,或者在您想再次访问结果时清除相关资源(在程序内)。

答案 1 :(得分:0)

我遇到了同样的问题,直到找到了#34; Saved Games"在我的开发者控制台中:

  1. 转到 游戏服务 - >游戏详情 - >已保存的游戏
  2. 将项目设置为 "开"
  3. Saved Games item in the Developer Console

    这可以解决您的问题,

    欢呼声, 保罗