存储单个分数的共享首选项
shared preferences for storing a single score
我正在开发这个问答游戏。在游戏结束时,我会向用户显示详细的总分。我想在这里开发的是使用 sharedpreferences 来存储值,能够使用显示用户总分的其他 activity 检索它。我只对存储测验的一个分数感兴趣(最初)。我想实现这个的原因是将来我会把它应用到其他测验模式,并在一个称为高分的 activity 中显示所有测验的总分。下面是我的代码,变量 finalscore(int) 存储用户的分数。我的代码一团糟,但我不太明白这一点,所以如果有人可以帮助我使用我的代码实现共享首选项,我将不胜感激,以便更好地理解。
更新 3.0
public static final String PREFS_FILE = "prefsFile";
SharedPreferences sharedPref = this.getSharedPreferences(PREFS_FILE,Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
editor.putInt(PREFS_FILE, finalScore);
editor.commit();
总得分Activity
public class TotalScore extends Activity {
TextView easy, totalScoreHeading;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_total_score);
totalScoreHeading = (TextView) findViewById(R.id.totalScoreHeading);
easy = (TextView) findViewById(R.id.txtViewTotalScoresEasy);
totalScoreHeading.setTextSize(28);
SharedPreferences sharedPref = getSharedPreferences(ScoreActivity.PREFS_FILE, Context.MODE_PRIVATE);
int defaultValue = 0;
int highscore = sharedPref.getInt(ScoreActivity.PREFS_FILE, defaultValue);
easy.setText("" + highscore);
}
}
您正在使用 finalScoreString 的 值作为在共享首选项中存储最终分数的键。此变量在您的其他 activity 中不可用,因此您的问题。建议遵循将密钥定义为以下的良好做法:
public static final String FINAL_SCORE = "finalScore";
在你的主 activity 中执行此操作,你可以在其中保存分数
editor.putInt(FINAL_SCORE, finalScore);
然后,在其他activity中,用它来检索分数:
int highscore = sharedPref.getInt(MainActivity.FINAL_SCORE, defaultValue)
事实上,您还应该为共享首选项文件名使用静态密钥,而不是硬编码的 "LevelScores" 字符串。
这也将缓解您可能遇到的另一个问题,具体如下:
finalScore = timeLeft * QuizActivity.correct;
finalScoreString = String.valueOf(finalScore);
有了这个,无论 finalScore 的值是什么,都被用作在首选项中存储最终分数的键。但是这个值可能(并且很可能会)每次都不同,这意味着您的密钥也会改变。最后,您会在首选项中有很多具有不同键的条目。您如何知道要使用哪一个来获取相应的值?通过使用 public 静态键(或不同游戏模式的键示例),您的最终分数可以很容易地检索到,因为您确切地知道要使用哪个键。
我正在开发这个问答游戏。在游戏结束时,我会向用户显示详细的总分。我想在这里开发的是使用 sharedpreferences 来存储值,能够使用显示用户总分的其他 activity 检索它。我只对存储测验的一个分数感兴趣(最初)。我想实现这个的原因是将来我会把它应用到其他测验模式,并在一个称为高分的 activity 中显示所有测验的总分。下面是我的代码,变量 finalscore(int) 存储用户的分数。我的代码一团糟,但我不太明白这一点,所以如果有人可以帮助我使用我的代码实现共享首选项,我将不胜感激,以便更好地理解。
更新 3.0
public static final String PREFS_FILE = "prefsFile";
SharedPreferences sharedPref = this.getSharedPreferences(PREFS_FILE,Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
editor.putInt(PREFS_FILE, finalScore);
editor.commit();
总得分Activity
public class TotalScore extends Activity {
TextView easy, totalScoreHeading;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_total_score);
totalScoreHeading = (TextView) findViewById(R.id.totalScoreHeading);
easy = (TextView) findViewById(R.id.txtViewTotalScoresEasy);
totalScoreHeading.setTextSize(28);
SharedPreferences sharedPref = getSharedPreferences(ScoreActivity.PREFS_FILE, Context.MODE_PRIVATE);
int defaultValue = 0;
int highscore = sharedPref.getInt(ScoreActivity.PREFS_FILE, defaultValue);
easy.setText("" + highscore);
}
}
您正在使用 finalScoreString 的 值作为在共享首选项中存储最终分数的键。此变量在您的其他 activity 中不可用,因此您的问题。建议遵循将密钥定义为以下的良好做法:
public static final String FINAL_SCORE = "finalScore";
在你的主 activity 中执行此操作,你可以在其中保存分数
editor.putInt(FINAL_SCORE, finalScore);
然后,在其他activity中,用它来检索分数:
int highscore = sharedPref.getInt(MainActivity.FINAL_SCORE, defaultValue)
事实上,您还应该为共享首选项文件名使用静态密钥,而不是硬编码的 "LevelScores" 字符串。
这也将缓解您可能遇到的另一个问题,具体如下:
finalScore = timeLeft * QuizActivity.correct;
finalScoreString = String.valueOf(finalScore);
有了这个,无论 finalScore 的值是什么,都被用作在首选项中存储最终分数的键。但是这个值可能(并且很可能会)每次都不同,这意味着您的密钥也会改变。最后,您会在首选项中有很多具有不同键的条目。您如何知道要使用哪一个来获取相应的值?通过使用 public 静态键(或不同游戏模式的键示例),您的最终分数可以很容易地检索到,因为您确切地知道要使用哪个键。