我正在制作一款能够在SharedPreferences
中存储最佳时间的游戏。这是玩家获胜时执行的方法。
public void victory(){
gameOver = true;
Toast.makeText(this, "Victory!", Toast.LENGTH_LONG).show();
Chronometer chronometer = (Chronometer) findViewById(R.id.chronometer1);
chronometer.stop();
long elapsedTime = SystemClock.elapsedRealtime() - chronometer.getBase();
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
if (elapsedTime < sharedPreferences.getLong("best", 2147483647));{
sharedPreferences.edit().putLong("best", elapsedTime).apply();
}
}
正如您所看到的,只有当它比最佳时间更好时才存储当前游戏的时间。
以下是onCreate
中加载并显示最佳时间的代码:
TextView bestScore = (TextView) findViewById(R.id.bestScore);
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
if (sharedPreferences.getLong("best", 2147483647) < 2147483647){
int min = (int) Math.floor(sharedPreferences.getLong("best", 2147483647) / 60000);
int sec = Math.round((sharedPreferences.getLong("best", 2147483647) - min) / 1000);
String mm = "" + min;
String ss = "" + sec;
if (min < 10){
mm = "0" + min;
}
if (sec < 10){
ss = "0" + sec;
}
String bestTime = mm + ":" + ss;
bestScore.setText("Best: " + bestTime);
}
但是,出于某种原因,即使时间更糟,每次玩家获胜时它也会不断更新最佳时间。请帮助。
答案 0 :(得分:1)
victory()
方法中的if语句后面有分号。
if (elapsedTime < sharedPreferences.getLong("best", 2147483647));{
sharedPreferences.edit().putLong("best", elapsedTime).apply();
}
删除它,你就可以了。