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

时间:2015-03-07 18:40:21

标签: android sharedpreferences

我正在开发这个问答游戏。在游戏结束时,我向用户显示详细的总分。我想在这里开发的是使用共享偏好来存储值,能够使用显示用户总分的其他活动来检索它。我只对存储测验的一个分数感兴趣(最初)。我想要实现这一点的原因是,将来我会将其应用于其他测验模式,并在一个名为highscores的活动中显示所有测验的总分。下面是我的代码,变量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();

TotalScore活动

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

}

}

1 个答案:

答案 0 :(得分:3)

您使用 finalScoreString的值作为在共享偏好设置中存储最终得分的关键。此变量在您的其他活动中不可用,因此您的问题。建议遵循将键定义为:

的良好做法
public static final String FINAL_SCORE = "finalScore";

在您的主要活动中执行此操作,您可以在其中保存分数

editor.putInt(FINAL_SCORE, finalScore);

然后,在其他活动中,使用它来检索分数:

int highscore = sharedPref.getInt(MainActivity.FINAL_SCORE, defaultValue)

事实上,您还应该使用共享首选项文件名的静态密钥,而不是硬编码的“LevelScores”字符串。

这还可以缓解您可能遇到的另一个问题,其中包含以下几行:

finalScore = timeLeft * QuizActivity.correct;
finalScoreString = String.valueOf(finalScore);

有了这个,无论finalScore的价值如何,都被用作在偏好中存储最终得分的关键。但是这个值可能(并且可能会)每次都不同,这意味着你的密钥也会改变。最后,您将在首选项中包含许多具有不同键的条目。你怎么知道你想用哪一个来获得相应的价值?通过使用公共静态密钥(或者用于不同游戏模式的密钥),您可以轻松检索最终得分,因为您确切知道要使用哪个密钥。