getPloat的SharedPreferences没有保存好的值

时间:2014-01-11 20:46:02

标签: android sharedpreferences

我有一个小游戏,如果舞台打开或关闭,我需要存储一些乐谱信息和一些数据。我尝试使用externalstorage,内部存储,现在使用共享首选项。 我的游戏只有一个活动和屏幕。屏幕上有一个名为pause的方法,当我们改变屏幕时调用它,也在调用onPause时调用。 我把save方法放在每个屏幕上但没有成功。 我的GameImpl类扩展了Activity。 所以我调用了方法加载并保存了一个GameImpl实例,它在我所拥有的每个类屏幕中都是相同的。 Settigs.java类中的代码如下所示,加载和保存两种方法:

package com.spaceguardians;
import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;

public class Settings {
public static int           Open                = 1;
public static int           Locked              = 0;
public static final int     NR_STAGES           = 8;
public static final float   NOT_PLAYED          = 0;

public static int           planet1             = Open;
public static int           planet2             = Locked;
public static int           planet3             = Locked;
public static int           planet4             = Locked;
public static int[]         stagePlanet1        = { Open, Locked, Locked, Locked, Locked, Locked, Locked, Locked };
public static int[]         stagePlanet2        = { Locked, Locked, Locked, Locked, Locked, Locked, Locked, Locked };
public static int[]         stagePlanet3        = { Locked, Locked, Locked, Locked, Locked, Locked, Locked, Locked };
public static int[]         stagePlanet4        = { Locked, Locked, Locked, Locked, Locked, Locked, Locked, Locked };
public static float[]       stagePlanet1Score   = { 00.00f, NOT_PLAYED, NOT_PLAYED, NOT_PLAYED, NOT_PLAYED,
        NOT_PLAYED, NOT_PLAYED, NOT_PLAYED      };
public static float[]       stagePlanet2Score   = { NOT_PLAYED, NOT_PLAYED, NOT_PLAYED, NOT_PLAYED, NOT_PLAYED,
        NOT_PLAYED, NOT_PLAYED, NOT_PLAYED      };
public static float[]       stagePlanet3Score   = { NOT_PLAYED, NOT_PLAYED, NOT_PLAYED, NOT_PLAYED, NOT_PLAYED,
        NOT_PLAYED, NOT_PLAYED, NOT_PLAYED      };
public static float[]       stagePlanet4Score   = { NOT_PLAYED, NOT_PLAYED, NOT_PLAYED, NOT_PLAYED, NOT_PLAYED,
        NOT_PLAYED, NOT_PLAYED, NOT_PLAYED      };

public static boolean       soundEnabled        = true;

public static final String spaceGuardiansPref = "spaceGuardiansPref" ;

public static void load(Context context) {// FileIO files) {

    SharedPreferences mySharedPreferences = context.getSharedPreferences(spaceGuardiansPref,
            Activity.MODE_PRIVATE);
    soundEnabled = mySharedPreferences.getBoolean("sound", true);
    planet1 = mySharedPreferences.getInt("planet1", Open);
    planet2 = mySharedPreferences.getInt("planet2", Locked);
    planet3 = mySharedPreferences.getInt("planet3", Locked);
    planet4 = mySharedPreferences.getInt("planet4", Locked);

    for (int i = 0; i < Settings.NR_STAGES; i++) {
        if (i == 0) {
            Settings.stagePlanet1[i] = mySharedPreferences.getInt("stagePlanet1" + i, Open);
            Settings.stagePlanet1Score[i] = mySharedPreferences.getFloat("stagePlanet1Score", 0);
        } else {
            Settings.stagePlanet1[i] = mySharedPreferences.getInt("stagePlanet1" + i, Locked);
            Settings.stagePlanet1Score[i] = mySharedPreferences.getFloat("stagePlanet1Score", NOT_PLAYED);
        }
        Settings.stagePlanet2[i] = mySharedPreferences.getInt("stagePlanet2" + i, Locked);
        Settings.stagePlanet2Score[i] = mySharedPreferences.getFloat("stagePlanet2Score", NOT_PLAYED);

        Settings.stagePlanet3[i] = mySharedPreferences.getInt("stagePlanet3" + i, Locked);
        Settings.stagePlanet3Score[i] = mySharedPreferences.getFloat("stagePlanet3Score", NOT_PLAYED);

        Settings.stagePlanet4[i] = mySharedPreferences.getInt("stagePlanet4" + i, Locked);
        Settings.stagePlanet4Score[i] = mySharedPreferences.getFloat("stagePlanet4Score", NOT_PLAYED);

    }

}

public static void save(Context context) {// FileIO files) {
    SharedPreferences mySharedPreferences = context.getSharedPreferences(spaceGuardiansPref,
            Activity.MODE_PRIVATE);
    SharedPreferences.Editor editor = mySharedPreferences.edit();
    editor.putBoolean("sound", soundEnabled);
    editor.putInt("planet1", planet1);
    editor.putInt("planet2", planet2);
    editor.putInt("planet3", planet3);
    editor.putInt("planet4", planet4);
    for (int i = 0; i < Settings.NR_STAGES; i++) {
        editor.putInt("stagePlanet1" + i, Settings.stagePlanet1[i]);
        editor.putFloat("stagePlanet1Score" + i, Settings.stagePlanet1Score[i]);

        editor.putInt("stagePlanet2" + i, Settings.stagePlanet2[i]);
        editor.putFloat("stagePlanet2Score" + i, Settings.stagePlanet2Score[i]);

        editor.putInt("stagePlanet3" + i, Settings.stagePlanet3[i]);
        editor.putFloat("stagePlanet3Score" + i, Settings.stagePlanet3Score[i]);

        editor.putInt("stagePlanet4" + i, Settings.stagePlanet4[i]);
        editor.putFloat("stagePlanet4Score" +i, Settings.stagePlanet4Score[i]);
    }
    editor.commit();

}

现在我相信只是得分并没有显示出来。声音没问题,它保存状态,阶段/行星正确选择和关闭,但所有开放阶段的得分为00.00。我不知道为什么..

1 个答案:

答案 0 :(得分:1)

原因是您在保存时将i附加到您的分数首选项名称:

editor.putFloat("stagePlanet4Score" +i, Settings.stagePlanet4Score[i]);
                                   ^^^

但是在加载分数时你没有添加它:

Settings.stagePlanet4Score[i] =
    mySharedPreferences.getFloat("stagePlanet4Score", NOT_PLAYED);
                                                   ^^