2017-03-16 1 views
0

J'ai un problème avec les préférences que je me demande si quelqu'un peut m'aider? Je travaille sur un jeu avec un écran de paramètres et un écran de jeu. Les deux doivent être en mesure d'écrire dans les mêmes préférences. Le code fonctionne dans l'écran Settings, il ressemble à ceci:Enregistrer les préférences de deux classes dans Libgdx

public class SettingsScreen implements Screen{ 
private Preferences prefs; 
    final Preferences prefs = Gdx.app.getPreferences("myprefs"); 
    prefs.putFloat("volume", volume); 

et dans l'écran Gamescreen je reçois une erreur. Le code dans l'écran de jeu est le même que dans les paramètres. Cela fonctionne:

volume = prefs.getFloat("volume", 1); 

mais cela ne fait pas:

prefs.putFloat("volume", volume); 

Je reçois l'erreur suivante:

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) 
+0

Besoin d'un peu plus du code, il est NullPointerException mais pas clair ce qui est nul. – Aryan

+0

'volume' est un objet Integer que vous avez oublié d'affecter une valeur? – Tenfour04

Répondre

0

Vous avez probablement une variable locale appelée "prefs" dans le constructeur et membre variable également appelée "prefs" qui est toujours nulle puisque vous affectez uniquement l'instance Preferences à la variable de portée locale.

private Preferences prefs; // class member variable 
final Preferences prefs = Gdx.app.getPreferences("myprefs"); // local scope variable 

La raison pour laquelle cela fonctionne dans votre écran Paramètres est probablement parce que vous faites les appels sur prefs dans le cadre local.

C'est ce que vous voulez sans doute:

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

Merci beaucoup pour votre aide! Maintenant, ça fonctionne très bien! – Arnulf

+0

Eh bien alors vous devriez accepter la réponse :) –