Сохранение рекордов в приложении для Android

У меня есть приложение, которое отображает счет на главном экране, но оно обнуляется каждый раз при запуске новой игры. Я хочу, чтобы он сохранял этот результат и менял его только в том случае, если следующий показатель выше, следовательно, он является самым высоким.

В настоящее время используется метод 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));
            }
        }   
    }

}

Теперь я знаю, что должен использовать что-то вроде общего предпочтения, чтобы иметь шанс сохранить счет и заменить его на большее число, когда достигну, но я не могу понять, как и где.

Как всегда, любая помощь с благодарностью.

Спасибо

2 ответа

Поместите следующее в ваш метод 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);

Обновите свой высокий балл, используя Shared Preference:

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();
                }
            }
        }   
    }
}

Вы должны окончательно прочитать о SharedPreferences и посмотреть на ссылку, приведенную в комментариях. Если вы хотите быстрое решение сейчас:

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, но это хорошая практика.

Другие вопросы по тегам