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);

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!