如何通过libGDX Preferences在Android设备上正确保存游戏进度?

5

我正在使用下面的代码。 这段代码在桌面版本上运行良好,但在Android设备上却不行。 返回 Gdx.app.getPreferences(PREFS_NAME) 总是 null。 为什么?我可能犯了什么错误?

import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Preferences;

public class BeatlesPreferences {
    // constants
    private static final String PREF_VIBRO = "vibro";
    private static final String PREF_MUSIC_ENABLED = "musicenabled";
    private static final String PREF_SOUND_ENABLED = "soundenabled";
    private static final String PREFS_NAME = "my_app";

    public BeatlesPreferences() {
    }

    protected Preferences getPrefs() {
        return Gdx.app.getPreferences(PREFS_NAME);
    }

    public boolean isSoundEffectsEnabled() {
        return getPrefs().getBoolean(PREF_SOUND_ENABLED, true);
    }

    public void setSoundEffectsEnabled(boolean soundEffectsEnabled) {
        getPrefs().putBoolean(PREF_SOUND_ENABLED, soundEffectsEnabled);
        getPrefs().flush();
    }

    public boolean isMusicEnabled() {
        return getPrefs().getBoolean(PREF_MUSIC_ENABLED, true);
    }

    public void setMusicEnabled(boolean musicEnabled) {  
        getPrefs().putBoolean(PREF_MUSIC_ENABLED, musicEnabled);
        getPrefs().flush();
    }

    public boolean isVibroEnabled() {
        return getPrefs().getBoolean(PREF_VIBRO, true);
    }

    public void setVibroEnabled(boolean vibro) {
        getPrefs().putBoolean(PREF_VIBRO, vibro);
        getPrefs().flush();
    }
}

请包含错误堆栈跟踪。我怀疑你在Gdx.app初始化之前就到达了getPrefs(尽管这应该与桌面相似)。您应该考虑添加一些assert检查,以确定Gdx.app是非空的,以区别于getPreferences返回null等情况。 - P.T.
2个回答

11

使用方法如下:

   private Preferences preferences;
   protected Preferences getPrefs() {
      if(preferences==null){
         preferences = Gdx.app.getPreferences(PREFS_NAME);
      }
   return preferences;
   }

0

你的代码中没有以任何方式设置应用程序名称在.prefs中。像添加音乐、振动等一样添加名称。

public void setPREFS_NAME() {
    getPrefs().putBoolean("PREFS_NAME", PREFS_NAME);
    getPrefs().flush();
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接