Android Studio - 保存所有游戏的累积分数

时间:2018-05-04 08:31:17

标签: java android sharedpreferences

我有一个基本测验,我可以使用下面的第二个屏幕(QuizActivity)获得每次尝试的分数:

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

    editor.putInt("myHighScore", mScore);
    editor.commit();

    SharedPreferences preferences2 =
            PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
    SharedPreferences.Editor editor2 = preferences2.edit();

    editor2.putInt("myXP", xp);
    editor2.commit();

然后我可以使用以下方法在我的第一个屏幕(MainActivity)中获取这些值:

    SharedPreferences preferences =
            PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
    int highScore = preferences.getInt("myHighScore", 0);

    SharedPreferences preferences2 =
            PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
    int xp = preferences2.getInt("myXP",0 );

但是,xp每次都重置为最后一个值 - 我需要做的是,将所有分数的总运行值存储在xp等变量中,并在每次完成测验时添加。

我是否需要在此处使用更多共享首选项,将运行值存储在第一个屏幕中,将其放在第二个屏幕上并将其发送回第一个添加的屏幕?感觉我现在太混淆了这个问题。任何帮助表示赞赏

干杯

2 个答案:

答案 0 :(得分:1)

如果我理解你的问题是你的数据即测验值,并且每次以共享偏好更新它们。因此,您所做的是使用共享首选项获取最后一个数据,然后添加到新值,即分数或xp。然后使用方法apply将其保存在共享首选项中。

SharedPreferences preferences=PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
    int highScore =highScore +preferences.getInt("myHighScore", 0);

    SharedPreferences preferences2 =
            PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
    int xp =xp+ preferences2.getInt("myXP",0 );

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

    editor.putInt("myHighScore", mScore);
    editor.apply();

    SharedPreferences preferences2 =
            PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
    SharedPreferences.Editor editor2 = preferences2.edit();

    editor2.putInt("myXP", xp);
    editor2.apply();

答案 1 :(得分:0)

您的xp变量不是全局变量,因此您必须手动跟踪并更新其值。你有几个选择:

  1. 创建一个存储xp的类。传递它。坚持摧毁等。

    1. 从“创建”首选项中访问xp,在应用程序运行时进行修改,并在切换屏幕之前将其保留