ophalen van savedInstanceState-waarden, nullpointerexception

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main2);
    savedInstanceState.putString("foo", "bar");
}

@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
  super.onRestoreInstanceState(savedInstanceState);

  String myString = savedInstanceState.getString("foo");

  Log.i("debug", "saved data: " + myString);
}

Ik probeer een aantal waarden in een activiteit te behouden, maar ik krijg de volgende foutmelding: 06-23 23: 09: 44.038: E/AndroidRuntime (17584): java.lang.RuntimeException: kan activiteit niet starten ComponentInfo {se. johanberntsson.activitytest/se.johanberntsson.activitytest.TestActivity}: java.lang.NullPointerException

Wat heb ik hier gemist? Bedankt

0
Goed testen of savedInstanceState om te zien of het null is voordat je aanroept getString (...) zou een goed begin zijn. Hoe probeer je 'bepaalde waarden te behouden'? Misschien is het gebruik van SharedPreferences misschien een betere optie.
toegevoegd de auteur Squonk, de bron

1 antwoord

Overschrijf onSaveInstanceState om waarden in savedInstanceState-bundel op te slaan als:

public String strfoo="";
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main2);
            //comment this line you only fatch values from savedInstanceState
            String myString = savedInstanceState.getString("foo");
            Log.i("debug", "saved data: " + myString);
           //savedInstanceState.putString("foo", "bar");
            strfoo="bar"; set value here
        }

        @Override
        public void onRestoreInstanceState(Bundle savedInstanceState) {
          super.onRestoreInstanceState(savedInstanceState);
          String myString = savedInstanceState.getString("foo");
          Log.i("debug", "saved data: " + myString);
        }

      @Override

      public void onSaveInstanceState(Bundle savedInstanceState) {
         savedInstanceState.putString("foo", strfoo);
         super.onSaveInstanceState(savedInstanceState);

       } 
2
toegevoegd
@ ρяσѕρєяK Ik krijg "onRestoreInstanceState moet een supertypemethode overschrijven of implementeren" wanneer dit binnen een Fragment-klasse wordt geprobeerd.
toegevoegd de auteur David Doria, de bron
Dank je! Maar als ik mijn nieuwe activiteit start -> druk op "terug" -> start dezelfde activiteit opnieuw, ik zie geen "balk" in mijn log. Moet onRestoreInstanceState op dat moment niet worden aangeroepen?
toegevoegd de auteur Johan, de bron
Ok, bedankt voor het uitleggen :)
toegevoegd de auteur Johan, de bron
onRestoreInstanceState alleen aangeroepen wanneer een config. veranderingen vinden plaats.
toegevoegd de auteur ρяσѕρєя K, de bron
maar ik denk dat wanneer u op de terug-knop drukt, zowel op RestoreInstanceState als onSaveInstanceState niet wordt aangeroepen. dus verander uw logica en gebruik sharedpreferce om de waarde op te slaan wanneer de gebruiker op de terugknop drukt door opkeyDown of onBackPressed op te heffen
toegevoegd de auteur ρяσѕρєя K, de bron
en wanneer de gebruiker op de toets back-up drukt op de methode userleavehint, ook wel genoemd, probeer dan waarde te besparen op ongebruikleafhint
toegevoegd de auteur ρяσѕρєя K, de bron
meest welkom vriend !! :-)
toegevoegd de auteur ρяσѕρєя K, de bron