2016-10-13 4 views
1

loadCurrentPlayerLeaderboardScore метод иногда возвращает значение из моих лидеров, а в других случаях нет результата, поэтому возвращается 999 для LB_SCORE и LB_RANK. Я подключен к сервису игровых игр Google, я могу просматривать таблицы лидеров, используя startActivityForResult(Games.Leaderboards.getLeaderboardIntent(mClient, leaderboardId), 1);, поэтому я могу подтвердить, что есть действительные баллы. Как я могу сделать вызов loadCurrentPlayerLeaderboardScore более надежным и последовательным?Android loadCurrentPlayerLeaderboardScore не всегда возвращает значения результата

public void populateLeaderboards(){ 

    String[] leaderboardIdArray = getResources().getStringArray(R.array.leaderboard_id_array); 
    String[] leaderboardNameArray = getResources().getStringArray(R.array.leaderboard_name_array); 

    leaderboardList = new ArrayList<LeaderboardItem>(); 
    leaderboardList.clear(); 

    for (int i = 0; i < leaderboardIdArray.length; i++) { 

     Log.d("leaderboardIdArray", leaderboardIdArray[i]); 

     getLeaderboardData(leaderboardIdArray[i],leaderboardNameArray[i]); 
LeaderboardItem(leaderboardIdArray[i], LB_NAME, String.valueOf(LB_SCORE), String.valueOf(LB_RANK)); 


    } 

}  

private void getLeaderboardData(final String leaderboardId,final String leaderboardName) { 

    Games.Leaderboards.loadCurrentPlayerLeaderboardScore(mClient, leaderboardId, LeaderboardVariant.TIME_SPAN_ALL_TIME, LeaderboardVariant.COLLECTION_PUBLIC).setResultCallback(new ResultCallback<Leaderboards.LoadPlayerScoreResult>() { 
    //Games.Leaderboards.loadPlayerCenteredScores(mClient, leaderboardId, LeaderboardVariant.TIME_SPAN_ALL_TIME, LeaderboardVariant.COLLECTION_PUBLIC, 1, true).setResultCallback(new ResultCallback<Leaderboards.LoadPlayerScoreResult>() { 

     @Override 
     public void onResult(final Leaderboards.LoadPlayerScoreResult scoreResult) { 

      if (isScoreResultValid(scoreResult)) { 
       // here you can get the score like this 

       LB_SCORE = scoreResult.getScore().getRawScore(); 
       LB_RANK = scoreResult.getScore().getRank(); 


      } else { 

       LB_SCORE = 999; 
       LB_RANK = 999; 

      } 

      LeaderboardItem leaderboardItem = new LeaderboardItem(leaderboardId, leaderboardName, String.valueOf(LB_SCORE), String.valueOf(LB_RANK)); 
      leaderboardList.add(leaderboardItem); 


     } 


    }); 
} 


private boolean isScoreResultValid(final Leaderboards.LoadPlayerScoreResult scoreResult) { 
    return scoreResult != null && GamesStatusCodes.STATUS_OK == scoreResult.getStatus().getStatusCode() && scoreResult.getScore() != null; 
} 

ответ

0

я сталкивался с подобными проблемами, и я вижу, что other post confirms мои подозрения, что делает слишком много вызовов приведет к ошибке сети. Поэтому мои предложения заключаются в том, что вы слишком злоупотребляете игровым сервисом.

+0

Знаете ли вы, есть ли официальная документация Google по этому вопросу? Благодарю. – John