2017-05-06 90 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