2016-05-13 5 views
0

scoretext und wordView werden die Werte von myScore und myWord nicht berücksichtigt, obwohl sie beim Debuggen einen Wert haben.Load Preferences Nullwert

Debug Ergebnis:

myScore:"990" scoreText :null 
wordView: null myWord"_ _ a _ _" 

EDIT:

Wo die savePrefernces genannt wird:

@Override 
public void onBackPressed() { 
    SavePreferences(); 
    super.onBackPressed(); 
} 

Wo laden Einstellungen aufgerufen:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_game_avtivity); 
    LoadPreferences(); 
} 

Die loadPrefernces wurde in der onBackPressed aufgerufen, um zu überprüfen, ob myScore oder myWord null ist.

Wenn Load Preferences von onCreate aufgerufen wird, wird die Exception aufgerufen! Nachricht

Fehler:

Die Nachricht wird zum ersten Mal aufgerufen, wenn der Wert noch null ist (Ausnahme wurde erwartet) und auch das zweite Mal, wenn der Wert nicht null sein sollte (Ausnahme war nicht zu erwarten)

05-13 17: 23: 06.671 31.547 bis 31.547/mt.edu.mcast.guesstheword2 W/System.err: scoreText oder Wordview sind null Attempt virtuellen Methode ‚VOID android.widget.TextView.setText aufzurufen (java.lang.CharSequence) ' für eine Nullobjekt-Referenz

+0

Wird Ihre Funktion loadPreferences und savePreferences aus derselben Aktivität aufgerufen? – Elye

+0

Um debuggen zu können, habe ich beide Methoden onBackPressed gemacht (um zu überprüfen, ob myScore und myWord einen Wert hatten). Loadprefernces sollte onCreate implementiert werden, aber wenn es in onCreate eingefügt wird, wird es in die Exception aufgenommen (scoreText oder wordView sind null). – NOSMILE

+0

Aufruf von der gleichen onBackPressed-Funktion? Können Sie den Funktionscode anzeigen? – Elye

Antwort

0
private void LoadPreferences(){ 
     try { 
      SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE); 
      initailizeView(); 
      scoreText.setText(sharedPreferences.getString("saveScore", "default")); 
      wordView.setText(sharedPreferences.getString("saveWord","default")); 
     } 
     catch (Exception e) { 
      System.err.println("scoreText or wordView are null " + e.getMessage()); 
     } 
} 

sharedPreferences.getString hat zwei Parameter der "Schlüssel" und "defValue". Indem ich den Wert in "defValue" erneut zuweise, würde ich auch einen Nullwert erhalten, da meine Variable null war. Der Wert musste wie oben gezeigt von den ersten Parametern "key" abgerufen werden.

0

"getPreferences" hat einen privaten Zugriff auf Aktivität. wenn Sie "LoadPreferences()" von einer anderen Aktivität verwenden verwenden "getSharedPreferences"

Probe:

SharedPreferences sharedPreferences = getSharedPreferences("YourApp", Context.MODE_PRIVATE); 
+0

Die LoadPreferences werden in der gleichen Aktivität aufgerufen, nachdem der Benutzer die Zurück-Taste gedrückt hat und die Eingabe in die Aktivität eintritt. – NOSMILE

+0

Sie rufen "LoadPreferences()" in der OnCreate-Methode auf. Wenn der Benutzer die Zurück-Taste drückt, ist die Aktivität noch vorhanden. Nach der Eingabe des Benutzers wird OnCreate nicht aufgerufen. Und warum haben Sie "SavePreferences()" in onBackPressed verwendet? ohne drücken Sie zurück Button.Vielleicht onDestroy ist besser –

+0

So änderte ich die savePreeferences OnDestroy genannt werden und die Loadpreferrences onStart aufgerufen werden.Das Problem ist, dass myScore und myWord sind NULL, wenn auf LoadPreferces aufgerufen, aber sie sind nicht null beim Speichern on savePreferces – NOSMILE

0

ändern onCreate wie unten

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_game_avtivity); 
    initailizeView(); 
    LoadPreferences(); 
} 

protected void initailizeView() { 
    scoreText = (TextView)findViewById(R.id.score) 
    wordView = (TextView)findViewById(R.id.word) 
} 

Hier habe ich angenommen, dass R.id .score und R.id.word sind zwei textViews.

+0

Funktioniert immer noch nicht Ich habe die Werte in loadReferences wie oben gezeigt zugewiesen Kann es sein, dass der AVD fehlerhaft ist? – NOSMILE