Probleme mit savedInstanceState

  • Hallo,


    ich habe folgendes Problem: Ich möchte einen einfachen Integer-Wert über das beenden einer App hinaus speichern. Dafür sollte sich doch der savedInstanceState eignen.


    Ich nutzte dafür folgenden Code in meinem Fragment:


    Zum Abspeichern:


    Code
    override fun onSaveInstanceState(outState: Bundle) {
        super.onSaveInstanceState(outState)
        outState.putInt("VALUE", value)
        Log.i("TAG", "Value gespeichert, Wert: ${value}")
    }



    Zum Abrufen:

    Code
    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
    
        val currentValue = savedInstanceState?.getInt("VALUE")
        Log.i("TAG", "Value abgerufen, Wert: ${currentValue}")
        if (currentValue != null) {
            value = currentValue
        }


    Über das Taggen des savedInstanceState kann ich sein Verhalten nachverfolgen und habe dabei folgendes Problem, das ich nicht verstehe:


    Wenn ich den Bildschirm drehe, dann funktioniert alles wie gewünscht, der Wert value wird abgespeichert und wieder korrekt abgerufen.


    Wenn ich aber die App beende und neustarte, dann ist der savedInstanceState beim abrufen nach dem Start der App immer null.


    Hat jemand eine Idee woran das liegen kann?


    Danke

  • savedInstanceState ist nicht dafür gedacht, Werte dauerhaft zu speichern.

    Zum Speichern und Laden benutzt Du SharedPreferences:


    Code
    SharedPreferences settings = getSharedPreferences(CONFIGURATION, 0);
    SharedPreferences.Editor editor = settings.edit();
    editor.putFloat( TOTAL_DISTANCE_KEY, (float)m_totalDistance );
    editor.putFloat( START_SPEED_KEY, (float)m_startSpeed );
    editor.putFloat( TARGET_SPEED_KEY, (float)m_targetSpeed );
    editor.commit(); 



    Code
    SharedPreferences settings = getSharedPreferences(CONFIGURATION, 0);
    m_totalDistance = settings.getFloat(TOTAL_DISTANCE_KEY, 0);
    m_startSpeed = settings.getFloat(START_SPEED_KEY,0);
    m_targetSpeed = settings.getFloat(TARGET_SPEED_KEY,0);

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!