2017-04-18 24 views
-2

我有一個在主屏幕上顯示分數的應用程序,但每次啓動新遊戲時都將此設置爲零。我想要做的是存儲該分數,並且只有在下一個分數較高時纔會改變,因此它是最高分數。在Android應用程序中存儲高分

目前,使用finish()方法利用hitCount方法來顯示從遊戲活動到主要活動的分數。

終點()方法是如下:

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

} 

現在,我知道我必須使用像共享喜好這樣的東西來存儲分數並在取得時用更高的數字取代它,但我無法弄清楚如何以及在哪裏。

一如既往,任何幫助非常感謝。

謝謝

+0

的[如何使用SharedPreferences在Android的存儲,讀取和編輯值]可能的複製(http://stackoverflow.com/questions/3624280/how-to-use-sharedpreferences-in-android-to-store-讀取和編輯值) –

+0

您可以訪問任何地方SharedPreferences你有一個Context(類似活動) –

回答

1

將以下內容放入您的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); 

更新您的高分:

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

我可以理解這種結構而不是哪兒它應該 –

+0

我編輯我的答案。我希望這次能有所幫助。 – Sky

+0

謝謝你。雖然我現在得到錯誤 - 運算符'>'不能應用於'int','android.widget.TextView' –

0

您應該明確瞭解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類,但它的一個好的做法。

相關問題