【问题标题】:Storing a high score in Android app在 Android 应用中存储高分
【发布时间】:2017-04-18 20:40:49
【问题描述】:

我有一个在主屏幕上显示分数的应用程序,但每次开始新游戏时它都会设置为零。我想要它做的是存储该分数,并且仅在下一个分数更高时才更改,因此它是最高分数。

目前部署了一个 hitCount 方法,finish() 方法利用该方法显示从游戏活动到主要活动的得分。

finish()方法如下:

public void finish(){

    Intent returnIntent = new Intent();
    returnIntent.putExtra("GAME_SCORE", gameView.getHitCount());
    setResult(RESULT_OK, returnIntent);
    super.finish();

}

在 MainMenu 类中,下面的 onActivityResult() 方法用于获取在主屏幕上显示的分数:

protected void onActivityResult(int requestCode, int resultCode, Intent retIntent) {
    // Check which request we're responding to
    if (requestCode == SCORE_REQUEST_CODE) {
        // Make sure the request was successful
        if (resultCode == RESULT_OK) {
            if (retIntent.hasExtra("GAME_SCORE")) {
                int scoreFromGame = retIntent.getExtras().getInt("GAME_SCORE");
                tvScore.setText(Integer.toString(scoreFromGame));
                //highScore.setText(Integer.toString(scoreFromGame));
            }
        }   
    }

}

现在,我知道我必须使用诸如共享偏好之类的东西来存储分数并在达到时用更高的数字替换它,但我不知道如何以及在哪里。

一如既往,非常感谢任何帮助。

谢谢

【问题讨论】:

标签: java android android-intent sharedpreferences


【解决方案1】:

将以下内容放入您的 onCreate 方法以读取高分。

SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
// Read the high score from Shared Preference
int mHighScore = sharedPref.getInt(getString(R.string.high_score), 0);

使用共享偏好更新您的高分:

protected void onActivityResult(int requestCode, int resultCode, Intent retIntent) {
// Check which request we're responding to
    if (requestCode == SCORE_REQUEST_CODE) {
        // Make sure the request was successful
        if (resultCode == RESULT_OK) {
            if (retIntent.hasExtra("GAME_SCORE")) {
                int scoreFromGame = retIntent.getExtras().getInt("GAME_SCORE");
                tvScore.setText(Integer.toString(scoreFromGame));
                //highScore.setText(Integer.toString(scoreFromGame));

                // Write the new high score to Shared Preference
                SharedPreferences.Editor editor = sharedPref.edit();
                if (scoreFromGame > mHighScore) {
                    editor.putInt(getString(R.string.high_score), scoreFromGame);
                    editor.commit();
                }
            }
        }   
    }
}

【讨论】:

  • 我可以理解这个结构,但不知道它应该去哪里
  • 谢谢。虽然我现在收到错误 - 运算符'>'不能应用于'int','android.widget.TextView'
  • 我知道出了什么问题。您的 TextView 之一与“highScore” int 变量具有相同的名称“highScore”。重命名变量,这应该是固定的。
  • 这个问题已经解决,但应用程序只是在启动时崩溃。现在有点乱了,我要放弃了,试着换个角度
  • 你的新角度是什么?
【解决方案2】:

您应该明确阅读 SharedPreferences 并查看 cmets 中给出的链接。如果您现在想要一个快速的解决方案:

MainActivity.java

SharedPreferences prefs;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // Set highscore text on start
    prefs = PreferenceManager.getDefaultSharedPreferences(this);
    int highscore = prefs.getInt(PreferenceHelper.KEY_HIGHSCORE, 0);
    tvHighScore.setText(Integer.toString(highscore));
}

protected void onActivityResult(int requestCode, int resultCode, Intent retIntent) {
    // Check which request we're responding to
    if (requestCode == SCORE_REQUEST_CODE) {
        // Make sure the request was successful
        if (resultCode == RESULT_OK) {
            if (retIntent.hasExtra("GAME_SCORE")) {
                int scoreFromGame = retIntent.getExtras().getInt("GAME_SCORE");
                tvScore.setText(Integer.toString(scoreFromGame));

                int highscore = prefs.getInt(PreferenceHelper.KEY_HIGHSCORE, 0);  // Get highscore stored in prefs
                if (scoreFromGame > highscore) {
                    // Update text and save new highscore
                    tvHighScore.setText(Integer.toString(scoreFromGame));
                    prefs.edit().putInt(PreferenceHelper.KEY_HIGHSCORE, scoreFromGame).apply();
                }
            }
        }
    }

}

PreferenceHelper.java

public final class PreferenceHelper {

    public static final String KEY_HIGHSCORE = "highscore";

}

您不必使用 PreferenceHelper 类,但这是一个很好的做法。

【讨论】:

    猜你喜欢
    • 2014-12-31
    • 2023-04-10
    • 1970-01-01
    • 2017-06-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-23
    • 1970-01-01
    • 2018-05-31
    相关资源
    最近更新 更多