包含SharedPreferences无效的布尔值

时间:2017-06-22 10:53:45

标签: android sharedpreferences

我正在制作一款能够在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);
    }

但是,出于某种原因,即使时间更糟,每次玩家获胜时它也会不断更新最佳时间。请帮助。

1 个答案:

答案 0 :(得分:1)

victory()方法中的if语句后面有分号。

 if (elapsedTime < sharedPreferences.getLong("best", 2147483647));{
    sharedPreferences.edit().putLong("best", elapsedTime).apply();
}  

删除它,你就可以了。