Android: Die Zeichenfolgeneinstellung ist nicht dauerhaft

Ich habe ein Problem mit dem Speichern der Zeichenfolgeneinstellungen. Ich habe diese Dienstprogrammmethoden zum Speichern:

public static void putStringSet(SharedPreferences pref, Editor e, String key, Set<String> set)
{
    if (Utils.isApiLevelGreaterThanGingerbread())
    {
        // e.remove(key); // I tried to remove it here
        e.putStringSet(key, set);
    }
    else
    {
        // removes old occurences of key
        for (String k : pref.getAll().keySet())
        {
            if (k.startsWith(key))
            {
                e.remove(k);
            }
        }

        int i = 0;
        for (String value : set)
        {
            e.putString(key + i++, value);
        }
    }
}

public static Set<String> getStringSet(SharedPreferences pref, String key, Set<String> defaultValue)
{
    if (Utils.isApiLevelGreaterThanGingerbread())
    {
        return pref.getStringSet(key, defaultValue);
    }
    else
    {
        Set<String> set = new HashSet<String>();

        int i = 0;

        Set<String> keySet = pref.getAll().keySet();
        while (keySet.contains(key + i))
        {
            set.add(pref.getString(key + i, ""));
            i++;
        }

        if (set.isEmpty())
        {
            return defaultValue;
        }
        else
        {
            return set;
        }
    }
}

Ich verwende diese Methoden, um mit GB abwärtskompatibel zu sein. Ich habe jedoch das Problem, dass die Verwendung der putStringSet-Methode für API-Lebkuchen nicht dauerhaft ist. Es ist dauerhaft, während die App ausgeführt wird. Aber es verschwindet nach dem Neustart. Ich werde die Schritte beschreiben:

Saubere Installation der Anwendung - es ist egal, mit Schlüssel XIch speichere String-Set A mit Schlüssel X - Präferenz enthält AIch speichere String-Set B mit Schlüssel X - Präferenz enthält BApp schließenNeustart der App - Voreinstellung enthält AIch speichere Stringmenge C mit Schlüssel X - Präferenz enthält CApp schließenNeustart der App - Voreinstellung enthält A

Also ist nur der erste Wert dauerhaft und ich kann ihn nicht überschreiben.

Weitere Hinweise:

Diese Methode ersetzt nur putStringSet und getStringSet. Also benutze ich commit () ... aber woanders (siehe Beispiel unten).Ich habe versucht, commit () durch apply () zu ersetzen - kein ErfolgWenn ich Code für ältere APIs in neueren APIs verwende (ich habe die ersten 4 Zeilen in beiden Methoden kommentiert), funktioniert er einwandfrei, ist aber nicht so effizient

Anwendungsbeispiel:

Editor e = mPref.edit();
PreferencesUtils.putStringSet(mPref, e, GlobalPreferences.INCLUDED_DIRECTORIES, dirs);
e.commit();

Vielen Dank für Ihre Hilfe.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage