Android SharedPreferences成功无效

时间:2016-08-20 17:23:57

标签: android sharedpreferences

我是android的新手,今天我想实现一些SharedPreferences。

这是我的代码:(或Image如果你更喜欢它)

@Override
public void onCreate(Bundle savedInstanceState) {  
// SOME CODE HERE


    // Initialize Shared Preferences
    final SharedPreferences sharedPreferences = getApplicationContext().getSharedPreferences("MyData", Context.MODE_PRIVATE);

    sharedPreferences.registerOnSharedPreferenceChangeListener(new SharedPreferences.OnSharedPreferenceChangeListener() {
        @Override
        public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String s) {
            logMsg(sharedPreferences.toString() + "=>" + s + "=>" + sharedPreferences.getString(s, ""));
        }
    });

    final EditText etId = (EditText) findViewById(R.id.etId);
    final EditText etValue = (EditText) findViewById(R.id.etValue);

    Button btnSave = (Button) findViewById(R.id.btn_save);
    btnSave.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View view) {
            // set Data
            logMsg("Id= " + etId.getText().toString() + " Value= " + etValue.getText().toString());
            sharedPreferences.edit().putString(etId.getText().toString(), etValue.getText().toString());
            if (sharedPreferences.edit().commit()){
                logMsg("Success");
            }else {
                logMsg("Fail");
            }

            // get Data
            logMsg("Id= '" + etId.getText().toString() + "' Value= " + sharedPreferences.getString(etId.getText().toString(), "No Value"));
        }
    });


//SOME CODE HERE
}

问题是,按 btn_save 后,日志显示成功sharedPreferences.edit().commit() ,但之后我不会使用{检索任何数据{1}} (我分别检索 dafault值,在我的情况下"没有价值" )。

你知道什么是错的吗? 是否有必要取消注册 SharedPreferences.OnSharedPreferenceChangeListener

感谢。

1 个答案:

答案 0 :(得分:3)

每次拨打edit()时,都会获得SharedPreferences.Editor的新实例。您需要在同一个编辑器实例上进行修改并commit()(或apply())。

因此,请将edit()的返回值保存到变量中,然后在其上调用putString()commit()