无法使用“首选项”保存或加载“整数”

时间:2013-03-09 14:32:04

标签: android preferences libgdx sd-card

所以我构建了一个类SaveAndLoad,如下所示:

public class SaveAndLoad {
    public Preferences pref;
    public final String path = "Highscore";

    public SaveAndLoad() {
        pref = Gdx.app.getPreferences("Gametitle");
    }

    public void saveInt(int value) {
        pref.putInteger(path, value);
        pref.flush();
    }

    public int getInt() {
        return pref.getInteger(path);
    }
}

当我尝试保存我的高分时,我致电saveInt(highscore),当您再次开启游戏时,我致电getInt

    constructor(){
        SaveAndLoad sdRemote = new SaveAndLoad ();
        try {
            highscore = sdRemote.getInt();
      } catch (NullPointerException e) {
            highscore = 0;
      }
    }

问题在于,当我在较早的游戏之后再次开始游戏时,高分不会加载,它会返回零...

我已经完成了清单权限:     

由于 ///丹尼尔

聚苯乙烯。在最后一个答案中,我说它适用于某些设备,但我后来发现并非如此。

3 个答案:

答案 0 :(得分:5)

确保检索这样的数据:

SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
int silent = settings.getInt("score", 0);

并保存如下:

  SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
  SharedPreferences.Editor editor = settings.edit();
  editor.putInt("score", playerScore);
  // Commit the edits!
  editor.commit(); //<----------

编辑:

你正在使用GDX吗?在这种情况下,请确保在GDX初始化后初始化此类。检查Gdx.app.getPreferences("Game");是否返回null。

Edit2:

好的,我们已经确认某些设备上的Gdx存在问题(很糟糕)。

如果您真的需要在桌面和Android设备上进行此项工作,还有另一种方法。如果你只是想让你的游戏在Android上工作,你就不应该使用Gdx来保存数据。

我建议您使用称为GDX And​​roid界面的东西。这样您就可以使用本答案中使用的原生Android调用自行处理在Android设备上保存数据。这不是很容易,但这里有一个教程:

https://code.google.com/p/libgdx-users/wiki/IntegratingAndroidNativeUiElements3TierProjectSetup

答案 1 :(得分:2)

您可以存储审核 数据

以下代码方法

public class SaveAndLoad {
        public SharedPreferences pref;
        public final String path = "Highscore";

        public SaveAndLoad() {
            pref = Gdx.app.getSharedPreferences("Gametitle",MODE_PRIVATE);
        }

        public void saveInt(int value) {
        Editor edit = pref.edit();
            edit.putInt(path, value);
            edit.commit();
        }

        public int getInt() {
            return pref.getInt(path,0);
        }
}

保存HighScore

int highscore = 0;
SaveAndLoad sdRemote = new SaveAndLoad ();
        try {
        highscore = sdRemote.getInt();
    } catch (NullPointerException e) {
        e.printStackTrace();
    }

获取HighScore

int highscore = 255;
SaveAndLoad sdRemote = new SaveAndLoad ();
        try {
        sdRemote.saveInt(highscore);
    } catch (NullPointerException e) {
        e.printStackTrace();
    }

此代码正常运行。并使用这个我确定它的对你有用

答案 2 :(得分:0)

从它的声音中你正确地做了一切,这使我们可以选择测试有问题的设备。如果您可以在设备上运行以下应用程序侦听器,并查看每次在设备上运行应用程序时MyValue是否增加。

public class PrefTest implements ApplicationListener {
    @Override public void create() {
        final Preferences pref = Gdx.app.getPreferences("TestApp");
        int value = pref.getInteger("MyValue", 0);
        Gdx.app.log("MyValue", Integer.toString(value));
        value++;
        pref.putInteger("MyValue", value);
        pref.flush();
    }

    @Override public void render() {}

    @Override public void dispose() {}

    @Override public void resize(final int width, final int height) {}

    @Override public void pause() {}

    @Override public void resume() {}
}

每次启动应用程序时,您都会看到LogCat中的值增加。例如,安装应用程序并运行,退出并从图标启动,重复退出并启动。如果这样可行,那么我们就知道问题与您的代码有关。如果这不起作用,那么我们知道这个问题与LibGDX或手机本身有关。