在Libgdx中保存两个类的首选项

在Libgdx中保存两个类的首选项,libgdx,preferences,Libgdx,Preferences,我有一个偏好的问题,我想知道是否有人可以帮助我? 我正在制作一个带有设置屏幕和游戏屏幕的游戏。两者都需要能够写入相同的首选项。代码在Settingsscreen中工作,如下所示: public class SettingsScreen implements Screen{ private Preferences prefs; final Preferences prefs = Gdx.app.getPreferences("myprefs"); prefs.putFloat("v

我有一个偏好的问题,我想知道是否有人可以帮助我? 我正在制作一个带有设置屏幕和游戏屏幕的游戏。两者都需要能够写入相同的首选项。代码在Settingsscreen中工作,如下所示:

public class SettingsScreen implements Screen{
private Preferences prefs;
    final Preferences prefs = Gdx.app.getPreferences("myprefs");
    prefs.putFloat("volume", volume);
在游戏屏幕上我发现了一个错误。游戏屏幕中的代码看起来与设置中的代码相同。这项工作:

volume = prefs.getFloat("volume", 1);
但这并不是:

prefs.putFloat("volume", volume);
我得到以下错误:

Exception in thread "LWJGL Application" java.lang.NullPointerException
    at com.mullenuh.learntoread.Screens.GameScreen$4.clicked(GameScreen.java:259)
    at com.badlogic.gdx.scenes.scene2d.utils.ClickListener.touchUp(ClickListener.java:89)
    at com.badlogic.gdx.scenes.scene2d.InputListener.handle(InputListener.java:58)
    at com.badlogic.gdx.scenes.scene2d.Stage.touchUp(Stage.java:353)
    at com.badlogic.gdx.backends.lwjgl.LwjglInput.processEvents(LwjglInput.java:332)
    at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:215)
    at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:124)

您可能在构造函数中有一个名为“prefs”的局部变量,成员变量也称为“prefs”,它仍然为空,因为您只将Preferences实例分配给局部范围变量

private Preferences prefs; // class member variable
final Preferences prefs = Gdx.app.getPreferences("myprefs"); // local scope variable
这在SettingsScreen中起作用的原因可能是您在本地范围内对Pref进行调用

这是您可能想要的:

// class member variable
private final Preferences prefs; 
// constructor:    
this.prefs = Gdx.app.getPreferences("myprefs");

需要更多的代码,这是空指针异常,但不清楚什么是空的。
volume
是一个你忘记赋值的整数对象吗?