如何从 Android 中的 Google Play Games API 中提取多个排行榜?

Posted

技术标签:

【中文标题】如何从 Android 中的 Google Play Games API 中提取多个排行榜?【英文标题】:How do I pull multiple leaderboards from the Google Play Games API in Android? 【发布时间】:2014-05-13 00:40:39 【问题描述】:

我正在开发一款多层次的 android 游戏,我想在登录后获得高分。 我正在这样做:

Games.Leaderboards.loadCurrentPlayerLeaderboardScore(getApiClient(), getString(LEADER_BOARDS[i]),
                LeaderboardVariant.TIME_SPAN_ALL_TIME, LeaderboardVariant.COLLECTION_PUBLIC)
                .setResultCallback(this);

但是回调没有给我排行榜ID:

@Override
public void onResult(LoadPlayerScoreResult res) 


我只得到分数 (res.getScore())。 那么我必须为我的 25 个关卡中的每一个都创建回调还是有更好的解决方案?

这也不行:

for (int i = 0; i < 25; i++)
    Games.Leaderboards.loadCurrentPlayerLeaderboardScore(getApiClient(), getString(LEADER_BOARDS[i]),
                LeaderboardVariant.TIME_SPAN_ALL_TIME, LeaderboardVariant.COLLECTION_PUBLIC)
                .setResultCallback(new ResultCallback<LoadPlayerScoreResult>() 

                    @Override
                    public void onResult(LoadPlayerScoreResult res) 
                        // can't use variable i here
                    
    );

【问题讨论】:

我认为你的方法不对。如果您已经拥有排行榜 ID,为什么还需要它。您正在将它输入到方法中,为什么需要它回来。 因为我必须知道我得到了哪个结果(对于第一种方法,使用一个 onResult 侦听器)。当然,如果我复制 25 次,我知道排行榜 ID,但应该有比这更好的解决方案。 那么你的目标到底是什么,你想以最有效的方式从 25 个不同的排行榜中获取玩家的分数? 完全正确,无需复制相同的语句 25 次,只需更改排行榜 id 索引;) 在这种情况下,只需使用您输入的 for 循环。它有什么问题? 【参考方案1】:

在你的 java 文件中定义这个内部类:

public class Leaderboard implements ResultCallback<Leaderboards.LoadPlayerScoreResult> 

        private Leaderboard(String id) 
            leaderboardId = id;
        

        private String leaderboardId = "";

        @Override
        public void onResult(LoadPlayerScoreResult arg0) 
            // TODO Auto-generated method stub
            System.out.println(leaderboardId);
        


现在使用这个代码:

for (int i = 0; i < 25; i++)  
    Games.Leaderboards.loadCurrentPlayerLeaderboardScore(getApiClient(), getString(LEADER_BOARDS[i]),
    LeaderboardVariant.TIME_SPAN_ALL_TIME, LeaderboardVariant.COLLECTION_PUBLIC)
    .setResultCallback(new Leaderboard(getString(LEADER_BOARDS[i])));

现在让我稍微解释一下这是如何工作的。 Leaderboard 类实现了 ResultCallback,因此在您获得玩家分数后,它会在 setResultCallback 方法中使用。现在,在 for 循环中,每次获取分数的调用都将类排行榜的不同对象设置为结果回调,并且每个对象都被赋予唯一的排行榜 ID,该 ID 使用构造函数保存在类中,并且正如您在课堂上看到的那样,有一个方法可以让您在 onresult 中返回 leaderboardid。

【讨论】:

哈哈,我还没有测试它,但它应该可以工作;)我会告诉你的。 只是好奇。我已经尝试过类似的代码,它适用于 2-3(第一个)9 的排行榜。我认为某种限制。它真的有用吗?

以上是关于如何从 Android 中的 Google Play Games API 中提取多个排行榜?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 google plus 帐户中注销 google plus 在 android 中的集成

通过 Google Ads 在 Flutter 中安装 Referrer

如何将变量从 AsyncTask 返回到 Android 中的 Google Map 活动

如何使用google plus的accessToken从不同的活动中注销android中的用户

如何从 Android 中的 Google Play Games API 中提取多个排行榜?

如何从 Google App Engine 推送 Android 应用程序中的事件流