存储单个分数的共享首选项

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 静态键(或不同游戏模式的键示例),您的最终分数可以很容易地检索到,因为您确切地知道要使用哪个键。