2013-03-09 35 views
3

加载整数:无法保存或因此我构建了一个类<code>SaveAndLoad</code>,看起来像这样首

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; 
     } 
    } 

的问题是,当我一个较早的比赛后再次启动游戏,高分不加载,它返回零...

我已经做了明显的权限:

谢谢 ///丹尼尔

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

+0

应该是'highsccore = getInt();'??? – Merlin 2013-03-09 14:44:15

+0

yupp,my bad:O – Daniel 2013-03-09 14:53:50

+0

几件事情,你调用saveInt()的地方是什么代码?你在哪里构造你的SaveAndLoad类?你在任何地方调用saveInt()吗?你确定它被称为?每次访问首选项时,你会构建一个SaveAndLoad实例吗?太多的未知数让我真正明白它为什么不起作用。我以前没遇到过这个问题。 – Jyro117 2013-03-16 23:11:26

回答

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的Android界面。这样,您就可以使用本答复中使用的原生Android调用自行处理在Android设备上保存数据。这不是很容易,但是虽然这里有一个教程:

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

+0

OP使用Gdx框架,虽然这将工作,我认为quesetion是专门关于这个框架 – Merlin 2013-03-09 14:45:39

+0

谢谢你的回答,Gdx.app.getPreferences(“Game”);不返回null! – Daniel 2013-03-09 15:02:40

+0

我认为Gdx可能会在某些设备上出现问题。你有没有试过在桌面版游戏上测试它?它在那里工作吗?你的代码应该工作正常。 – 2013-03-09 15:29:31

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或手机本身的问题。

2

可以retrive数据从这个

以下代码为方法

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); 
     } 
} 

保存高分

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

得到高分

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

该代码正常工作我。并使用此我相信它的对你有用

相关问题