【问题标题】:Getting Score of user from Google Play Game Service?从 Google Play 游戏服务获取用户分数?
【发布时间】:2014-04-16 04:36:50
【问题描述】:

我是 Android 应用开发的新手。我想从 Google Play 游戏服务中检索用户的分数,我正在使用以下代码来获得高分,但我不知道它如何返回值以及如何保存它。

Games.Leaderboards.loadCurrentPlayerLeaderboardScore(getApiClient(), getString(R.string.highscore), LeaderboardVariant.TIME_SPAN_ALL_TIME, LeaderboardVariant.COLLECTION_PUBLIC);

将其保存为 int 或 string 不起作用。

【问题讨论】:

    标签: android google-play-games


    【解决方案1】:

    loadCurrentPlayerLeaderboardScore 的完整参数如下所示

         Games.Leaderboards.loadCurrentPlayerLeaderboardScore(getApiClient(),
                getString(R.string.word_attack_leaderboard),
                LeaderboardVariant.TIME_SPAN_ALL_TIME,
                LeaderboardVariant.COLLECTION_PUBLIC).setResultCallback(
                new ResultCallback<LoadPlayerScoreResult>() {
    
                    @Override
                    public void onResult(LoadPlayerScoreResult arg0) {
                        LeaderboardScore c = arg0.getScore();
                        long score = c.getRawScore();
                    }
                 }
    

    R.string.word_attack_leaderboard 是从 google play 游戏服务获取的排行榜 id

    【讨论】:

      【解决方案2】:

      方法:

      loadCurrentPlayerLeaderboardScore (GoogleApiClient apiClient, String leaderboardId, int span, int leaderboardCollection)

      返回

      PendingResult&lt;Leaderboards.LoadPlayerScoreResult&gt;

      那么你必须使用Leaderboards.LoadPlayerScoreResult类的getScore()方法来获取它。

      请查看这些链接...

      The loadCurrentPlayerLeaderboardScore method

      The LoadPlayerScoreResult in the PendingResult

      编辑:这是你如何使用它。

      Games.Leaderboards.loadCurrentPlayerLeaderboardScore().setResultCallback(new ResultCallback<LoadPlayerScoreResult>() {
      
                  @Override
                  public void onResult(LoadPlayerScoreResult arg0) {
                      LeaderboardScore c = arg0.getScore();
                  }
      
              });
      

      这就是你获得分数的方式。

      【讨论】:

      • @SudeepAcharya 我要进行编辑,请查看我的示例代码
      • @SudeepAcharya 添加参数以匹配方法签名:loadCurrentPlayerLeaderboardScore (GoogleApiClient apiClient, String leaderboardId, int span, int leaderboardCollection)
      • @SudeepAcharya 使用 c.getRawScore(),它会给你一个 long 类型的值。查看此链接了解其他获取分数的方法:developer.android.com/reference/com/google/android/gms/games/…
      • 您也可以使用 .toString(); 将 long 更改为字符串;
      • @SudeepAcharya 你必须发布 logcat,这样我才能看到问题。
      【解决方案3】:

      4 年后,我遇到了类似的问题。有些东西已被弃用,有些东西不再有效。因此,对于那些现在想知道如何做的人,在 2018 年......检查这个答案-

      首先你必须得到 LeaderBoardClient

      mLeaderboardsClient = Games.getLeaderboardsClient(MainActivity.this, googleSignInAccount);
      

      接下来就可以得分了

      mLeaderboardsClient.loadCurrentPlayerLeaderboardScore(getString(R.string.leaderboard_id), LeaderboardVariant.TIME_SPAN_ALL_TIME, LeaderboardVariant.COLLECTION_PUBLIC)
                .addOnSuccessListener(this, new OnSuccessListener<AnnotatedData<LeaderboardScore>>() {
                    @Override
                    public void onSuccess(AnnotatedData<LeaderboardScore> leaderboardScoreAnnotatedData) {
                        long score = 0L;
                        if (leaderboardScoreAnnotatedData != null) {
                            if (leaderboardScoreAnnotatedData.get() != null) {
                                score = leaderboardScoreAnnotatedData.get().getRawScore();
                                Toast.makeText(MainActivity.this, Long.toString(score), Toast.LENGTH_SHORT).show();
                                Log.d(TAG, "LeaderBoard: " + Long.toString(score));
                            } else {
                                Toast.makeText(MainActivity.this, "no data at .get()", Toast.LENGTH_SHORT).show();
                                Log.d(TAG, "LeaderBoard: .get() is null");
                            }
                        } else {
                            Toast.makeText(MainActivity.this, "no data...", Toast.LENGTH_SHORT).show();
                            Log.d(TAG, "LeaderBoard: " + Long.toString(score));
                        }
                    }
                })
                .addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {
                        Toast.makeText(MainActivity.this, "Failure", Toast.LENGTH_SHORT).show();
                        Log.d(TAG, "LeaderBoard: FAILURE");
                    }
        });
      

      .loadCurrentPlayerLeaderboardScore的3个参数如下

      排行榜的 ID,从中加载分数。

      时间跨度来检索数据。有效值为 TIME_SPAN_DAILY、TIME_SPAN_WEEKLY 或 TIME_SPAN_ALL_TIME。

      排行榜集合来检索分数。有效值为 COLLECTION_PUBLIC 或 COLLECTION_SOCIAL。

      【讨论】:

      • 终于有了一个不被弃用的答案!
      猜你喜欢
      • 1970-01-01
      • 2014-02-02
      • 2014-09-30
      • 1970-01-01
      • 2013-07-31
      • 2017-09-27
      • 2018-05-09
      • 1970-01-01
      相关资源
      最近更新 更多