SharedPreferences无法按预期工作,无法读取或写入首选项

时间:2013-05-20 00:16:00

标签: java android sharedpreferences

private void init() {

    SharedPreferences prefs = getSharedPreferences("data", Context.MODE_PRIVATE);

    // SET VALUE RECORD

    record = prefs.getInt("record", 0);

    prefs.edit().commit();
}

private void setRecord(int i ) {

    SharedPreferences prefs = getSharedPreferences("data", Context.MODE_PRIVATE);

    if(i > prefs.getInt("record", 0))
        prefs.edit().putInt("record", i);

    prefs.edit().commit();
}

private int getRecord() {

    int rec;

    SharedPreferences prefs = getSharedPreferences("data", Context.MODE_PRIVATE);

    rec = prefs.getInt("record", 0);

    prefs.edit().commit();

    Toast toast = Toast.makeText(this, rec+"", Toast.LENGTH_SHORT);
    toast.show();

    return rec;
}

这段代码应该设置一个int并检索它,但它似乎没有设置它......你能看出为什么会这样吗?

2 个答案:

答案 0 :(得分:1)

Editor editor = prefs.edit();
editor.putInt("record",i);
editor.commit();

答案 1 :(得分:1)

认为最好调用界面SharedPreferences.Editor来编辑首选项,而不是使用prefs.edit().putInt("record", i);。文档说......

  

对首选项的修改必须通过   SharedPreferences.Editor对象,以确保保留首选项值   当他们致力于存储时,处于一致的状态和控制。

如果您将setMethod更改为以下内容,则应该有效...

private void setRecord(int i ) {

    SharedPreferences prefs = getSharedPreferences("data", Context.MODE_PRIVATE);
    SharedPreferences.Editor editor = prefs.edit();

    if(i > prefs.getInt("record", 0))
        editor.putInt("record", i);

    editor.commit();
}

我猜您在代码中的某处调用了上述方法setRecord,因为我无法在您粘贴的代码段中看到它被调用。