Top 5 scores from google leaderboard

Sandeep R picture Sandeep R · Jun 5, 2014 · Viewed 10.5k times · Source

My requirement is to get top 5 scores from leaderboard and display it in my app.

There is a method loadTopScores but it shows the scores in its own UI i guess.

mGamesClint.loadTopScores(new OnLeaderboardScoresLoadedListener() {

            public void onLeaderboardScoresLoaded(int arg0, LeaderboardBuffer arg1,
                    LeaderboardScoreBuffer arg2) {
                // TODO Auto-generated method stub




            }
        }, LEADERBOARD_ID,LeaderboardVariant.TIME_SPAN_ALL_TIME  , LeaderboardVariant.COLLECTION_PUBLIC, 5, true);

So is there any way I can get individual data like Name and score..?

Name 1 : Name of the top scorer 1 score 1 : score of the top scorer 1

Name 2 : Name of the top scorer 2 score 2 : score of the top scorer 2

......and so on

I just want name string and score integer so that I can use it in my game.

Please suggest me some ideas

Answer

free3dom picture free3dom · Jun 5, 2014

You are on the right track in your example, you just need to extract the information once it is loaded. It is fairly confusing to get it working but I will point you to this answer of mine, which shows how to do it for achievements - doing it for leaderboards works the same way, except that you will use the leaderboard interfaces instead of those used for achievements.

Basically, you will access arg2 to get the data, and it should look something like this:

mGamesClint.loadTopScores(new OnLeaderboardScoresLoadedListener() {

   public void onLeaderboardScoresLoaded(int arg0, LeaderboardBuffer arg1, LeaderboardScoreBuffer arg2) {

      // iterate through the list of returned scores for the leaderboard
      int size = arg2.getCount();
      for ( int i = 0; i < size; i++ )  {
         LeaderboardScore lbs = arg2.get( i );

         // access the leaderboard data
         int rank = i + 1;         // Rank/Position (#1..#2...#n)
         String name = lbs.getScoreHolderDisplayName();
         String scoreStr = lbs.getDisplayScore();
         long score = lbs.getRawScore();

         // now display or cache these values, or do whatever with them :)
      }

      arg2.close();
      arg1.close();
   }
}, LEADERBOARD_ID,LeaderboardVariant.TIME_SPAN_ALL_TIME, LeaderboardVariant.COLLECTION_PUBLIC, 5, true);

I did not actually test this implementation, but it should work (or at least show you enough so you can fix any mistakes I might have made).

Just remember that this will be done asynchronously, so the contents of the method will not execute immediately, but rather once the scores have been loaded.