Сохранение рекордов в приложении для 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, но это хорошая практика.