2017-06-22 84 views
0

我正在製作一個遊戲,其中存儲最佳時間在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); 
    } 

但是,出於某種原因,它讓每一個玩家贏得時間更新的最佳時間,即使時間差。請幫助。

+0

我認爲elapsedTime計算可能有問題,請嘗試打印勝利時間的elapsedTime值。 – NehaK

+0

不,我不這麼認爲,因爲「最好的」TextView正確地顯示了前一次遊戲的時間,但這不是最好的時間。 –

+0

如果勝利()方法中的語句是拼寫錯誤,那麼分號後的分號? –

回答

1

您的victory()方法中if語句後面有一個分號。

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

只是刪除,你很好去。