0

I have a Settings class, that uses SharedPreferences to load and save settings. To make it readable, I made the Editor and SharedPreferences objects members of that class and call on them set read and write settings. However, this doesn't seem to work well.

This is the Settings class:

public class Settings { 
    protected Context ctx;
    protected SharedPreferences sp;
    protected Editor edit;

    public Settings(Context c) {
         ctx = c;       
         sp = ctx.getSharedPreferences("app_settings", Context.MODE_PRIVATE);
         edit = sp.edit();
    }

    public void setString(String name, String value) {
        edit.clear();
        edit.putString(name, value);
        edit.commit();
    }
    public String getString(String name, String def) {
        return sp.getString(name, def);
    }
}

And I call like this (from my from Application extended MyApplication's onCreate:

Settings s = new Settings(getApplicationContext());
s.setString("foo", "bar");

When I reread that value, I always get the default value:

String value = s.getString("foo", "default");
4

2 回答 2

1

这是因为 edit.clear()

改变这个方法

public void setString(String name, String value) {
    edit.clear();
    edit.putString(name, value);
    edit.commit();
}

如下

public void setString(String name, String value) {

    edit.putString(name, value);
    edit.commit();
}
于 2013-08-14T11:44:37.833 回答
0

Try this code.

private final String LANGUAGE = "Language";//Key to identify field in sharedPrefrence file.
private final String PREFS_NAME = "SharedPreferenceFile";//Shared Preference file name.

public String getLanguageFromSharedPreference() {
    sharedPreferences = this.getSharedPreferences(PREFS_NAME, 0);
    return sharedPreferences.getString(LANGUAGE, "en");
}

public void setLanguageToSharedPreference(String newlang) {
    sharedPreferences = this.getSharedPreferences(PREFS_NAME, 0);
    SharedPreferences.Editor editor = sharedPreferences.edit();
    editor.putString(LANGUAGE, newlang);
    editor.commit();
}
于 2013-08-14T11:40:49.127 回答