2013-03-09 37 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(); 
    } 

該代碼正常工作我。並使用此我相信它的對你有用

相關問題