2017-05-06 65 views
0

我正在製作一款遊戲,我想保存用戶的最高分數,所有遊戲都在我的遊戲中工作,但問題是,當我退出遊戲時,自動設置,但我想讓它顯示給所有用戶,直到它休息,然後它會更新。使用sharedpreference保存高分

這是退出遊戲後顯示對話框:

private void showGameOverDialog() { 





      int previousScore=getHighScore(); 
      if(playerScore>previousScore){ 
       saveHighScore(); 
      } 

      //AlertDialog 
      //AlertDialog.Builder 

      AlertDialog.Builder builder= new AlertDialog.Builder(MainActivity.this); 
      builder.setTitle("Exit Game"); 
      builder.setMessage("Afraid?"); 
      //Positive, Negative, Neutral 
      //Anonymous Inner Type Interface Implementation 
      builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int which) { 
        exitGame(); 

       } 
      }); 
      builder.setNegativeButton("No", 

        new DialogInterface.OnClickListener() { 
         @Override 
         public void onClick(DialogInterface dialog, int which) { 
          resetGame(); 
         } 
        } 
      ); 
      AlertDialog exitDialog=builder.create(); 
      exitDialog.show(); 


} 

方法來獲得高分

private int getHighScore(){ 
    SharedPreferences highScore=getSharedPreferences("high",0); 
    return highScore.getInt("highScore",0); 
} 

保存高分

private void saveHighScore(){ 

    SharedPreferences sharedPreferences=getSharedPreferences("data",0); 
    SharedPreferences.Editor writer=sharedPreferences.edit(); 

    int displayValue=playerScore; 
    //Username-Highscore 
    writer.putInt("display",displayValue); 

    writer.commit(); 
    display(); 

} 

顯示了很高的分數

private void display(){ 

    SharedPreferences sharedPreferences=getSharedPreferences("data",0); 
    String userString=sharedPreferences.getString("playerName","Nothing found"); 
    int highScore=sharedPreferences.getInt("display",0); 
    username.setText(userString+"-"+highScore); 
} 

回答

0

這個替換您的getHighScore()方法,並嘗試..它可能工作

private int getHighScore(){ 
     SharedPreferences highScore=getSharedPreferences("data",0); 
     return highScore.getInt("display",0); 
    } 
+0

@VishalSharma prefernce文件的名稱是「數據」,您在其中保存您的高分,因此檢索名稱時應該只是「數據」而不是「高」,請嘗試上述解決方案,並請知道如果這有效。 –

+0

沒有先生,它不工作 –

+0

@VishalSharma現在嘗試...你用來保存和檢索高分的關鍵是不同的 –

0

試試這個

保存高分:

SharedPreferences preferences = 
PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); 
SharedPreferences.Editor editor = preferences.edit(); 

editor.putInt("myHighScore", --your high score--); 
editor.commit(); 

顯示

SharedPreferences preferences = 
PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); 
int myInt = preferences.getInt("myHighScore", -1); 
username.setText("High Score : " + myInt); 

刪除

SharedPreferences preferences = 
PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); 
SharedPreferences.Editor editor = preferences.edit(); 

editor.remove("myHighScore"); 

editor.commit(); 
0

首先,您在應用上創建了兩個共享的首選項位置,一個名爲「高」,第二個名爲「數據」,然後您將高分值保存爲一個,試圖從另一方面得到它。我希望你明白現在有什麼問題。 這裏是一個更好的解決方案的例子。

private static final String HIGH_PREF_KEY = "high_score"; 
SharedPreferences sharedPreferences=getSharedPreferences("GAME_SHAREDPREF",0); 


puplic void saveHighScore(int score){ 
SharedPreferences.Editor writer = sharedPreferences.edit(); 
writer.putInt(HIGH_PREF_KEY,score).commit(); 
} 

puplic int getHighScore(){ 
return sharedPreferences.getInt(HIGH_PREF_KEY, 0); 
} 
0

創建具有名稱的共享偏好,即「內容」。用關鍵「highScore」設置高分並放置你的分數。當您檢索到「highScore」並更新時。

您可以使用prefs-droid這個android共享首選項的包裝工具。

如果您使用此庫,請在您的應用程序中創建共享首選項。

Preference.load().using(this).with(PREFERENCE_NAME).prepare(); 

保存得分只用一條線

private void saveHighScore(){ 
    Preference.putInt("highScore", highScore); 
} 

通過

private int getHighScore(){ 
    return Preference.getInt("highScore"); 
} 

拿到分數,並使用

private void resetScore() { 
    Preference.remove("highScore); 
} 

顯示比分

復位
private void display(){ 
    int highScore = getHighScore(); 
    username.setText(userString + "-" + highScore); 
} 
+0

在哪裏可以騎這1行代碼 –

+0

任何你想保存或更新或從共享偏好中刪除的地方 – ARiF