Preference Manager始终加载默认值

时间:2014-03-22 10:03:36

标签: java android default-value

我使用Preference Manager来保存一些整数和布尔值。 我创建了一个SettingsPreferences类:

public class SettingsPreferences {

    private Context mContext;

    public SettingsPreferences(Context context) {
        this.mContext = context;
    }

    public boolean isNull() {
        if (PreferenceManager.getDefaultSharedPreferences(mContext) == null) {
            return true;
        } else {
            return false;
        }
    }

    public void setBoolean(String name, boolean value) {
        PreferenceManager.getDefaultSharedPreferences(mContext).edit()
                .putBoolean(name, value).apply();
    }

    public void setInt(String name, int value) {
        PreferenceManager.getDefaultSharedPreferences(mContext).edit()
                .putInt(name, value).apply();
    }

    public boolean getBoolean(String name, boolean defaultValue) {
        return PreferenceManager.getDefaultSharedPreferences(mContext)
                .getBoolean(name, defaultValue);
    }

    public int getInt(String name, int defaultValue) {
        return PreferenceManager.getDefaultSharedPreferences(mContext).getInt(
                name, defaultValue);
    }}

在Main类的onCreate方法中,我添加了默认值:

mSettingsPreferences = new SettingsPreferences(getApplicationContext());
if(mSettingsPreferences.isNull() == true) {
    mSettingsPreferences.setBoolean("MAX", 1);
    mSettingsPreferences.setBoolean("PROGRESS", 1);
}

在片段类中,我需要加载该数据并将其显示在进度条中。 这是代码:

Thread t = new Thread() {
   public void run() {
     try {
       sleep(100);
       SettingsPreferences sett = new SettingsPreferences(mContext);
       mProgBar.setMax(sett.getInt("MAX", 2));
       mProgBar.setProgress(sett.getInt("PROGRESS", 1));

     } catch (InterruptedException e) {
       // TODO Auto-generated catch block
       e.printStackTrace();
     }
   }
};
t.start();

上下文定义我检查了他,进度条也是,但每次加载我的默认值。 有什么问题?

3 个答案:

答案 0 :(得分:0)

使用此:

要初始化首选项,请使用以下命令:

SharedPreferences preferences = PreferenceManager
        .getDefaultSharedPreferences(context);
String string = preferences.getString(key, defValue);

现在为Storind数据:

Editor editor = preferences.edit();
editor.putString(key,value);
editor.commit();

有关详细信息,请参阅此tutorial

希望你明白。

答案 1 :(得分:0)

您必须调用Editor的commit()来应用更改

答案 2 :(得分:0)

我想你的isNull()总是返回false,因为:

PreferenceManager.getDefaultSharedPreferences(mContext)

不会返回null,至少我从未见过这种情况。这样你永远不会初始化你的MAX和PROGRESS值,最后你会读取默认值。

您可以使用SharedPreferences.contains方法检查MAX是否存在,如果不存在则初始化。