如何在Android中从Google Play Games API中获得多个排行榜?

如何在Android中从Google Play Games API中获得多个排行榜?,android,google-play-services,google-play-games,Android,Google Play Services,Google Play Games,我正在开发一款多层次的Android游戏,我想在登录后获得高分。 我正在这样做: Games.Leaderboards.loadCurrentPlayerLeaderboardScore(getApiClient(), getString(LEADER_BOARDS[i]), LeaderboardVariant.TIME_SPAN_ALL_TIME, LeaderboardVariant.COLLECTION_PUBLIC) .s

我正在开发一款多层次的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
                    }
    });
for(int i=0;i<25;i++)
游戏.排行榜.LoadCurrentPlayerLeadboardScore(getApiClient(),getString(LEADER_BOARDS[i]),
LeadboardVariant.TIME\u SPAN\u ALL\u TIME,LeadboardVariant.COLLECTION\u PUBLIC)
.setResultCallback(新的ResultCallback(){
@凌驾
public void onResult(LoadPlayerCoreResult res){
//这里不能使用变量i
}
});

在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);
        }

}
公共类排行榜实现ResultCallback{
私人排行榜(字符串id){
排行榜id=id;
}
私有字符串排行榜ID=“”;
@凌驾
public void onResult(LoadPlayerCoreResult arg0){
//TODO自动生成的方法存根
System.out.println(排行榜ID);
}
}
现在使用以下代码:

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])));
}
for(inti=0;i<25;i++){
游戏.排行榜.LoadCurrentPlayerLeadboardScore(getApiClient(),getString(LEADER_BOARDS[i]),
LeadboardVariant.TIME\u SPAN\u ALL\u TIME,LeadboardVariant.COLLECTION\u PUBLIC)
.setResultCallback(新排行榜(getString(LEADER_BOARDS[i]));
}

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

我认为你的方法是错误的。如果您已经拥有排行榜id,为什么还需要它。您正在将它输入到方法中,为什么您需要它返回。因为我必须知道我返回的结果是什么(对于使用一个onResult侦听器的第一种方法)。当然,如果我复制25次,我知道排行榜id,但应该有一个更好的解决方案。那么,你的目标到底是什么,你想以最有效的方式从25个不同的排行榜中获得一名球员的分数?准确地说,不复制同一条语句25次,只需更改排行榜id索引;)在这种情况下,只需将其用于您键入的循环。有什么问题吗?哈哈,我还没有测试过,但应该可以用;)我会让你知道的,只是好奇而已。我尝试过类似的代码,它适用于2-3个(第一个)9个排行榜。我想是某种限制。它真的对更多的人有用吗?