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

时间:2014-04-02 00:33:44

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

我正在开发多级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
                    }
    });

1 个答案:

答案 0 :(得分: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])));
}

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