java - 使用 SharedPreferences 和 Editor 作为成员

标签 java android sharedpreferences

我有一个 Settings 类,它使用 SharedPreferences 来加载和保存设置。为了使其可读,我使 EditorSharedPreferences 对象成为该类的成员,并调用它们设置读取和写入设置。不过,这似乎效果不太好。

这是Settings类:

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

我这样调用(来 self 的 Application 扩展的 MyApplicationonCreate:

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

当我重新读取该值时,我总是得到默认值:

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

最佳答案

这是因为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();
}

关于java - 使用 SharedPreferences 和 Editor 作为成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18230313/

相关文章:

java - IntelliJ 不会终止使用 gradle 构建的 Spring Boot 应用程序

android - 避免gradle构建参数进行干净的任务

android - 可以在同一个应用程序中使用 getDefaultSharedPreferences 和 getSharedPreferences(nome,mode) 吗?

java - GWT 滚动条未出现

java - 代号一的虚拟浏览器

java - 关闭应用程序后守护线程仍然存在

android - 如何从 sharedpreferences 中检索微调器值?安卓

java - 我们可以使用 dex2jar 工具或任何其他方式混淆 java 中的注释吗?

java - 如何在JAVA中访问java.lang.Object json值?

java - Android - 将数据从 fragment 传递到新的java类