SharedPreferences getAll()方法只返回我最后输入的值?

时间:2017-08-30 09:55:49

标签: android sharedpreferences

根据此stack overflow question

此代码应返回首选项中的所有值

 Map<String, ?> allEntries = sPref.getAll();
    for (Map.Entry<String, ?> entry : allEntries.entrySet()) {
        Log.d("map values", entry.getKey() + ": " + entry.getValue().toString());
    } 

但是我只获得了我在最后添加的首选项,它没有获得整个首选项文件键和值

这是我的Stack Trace

08-30 15:14:10.858 30290-30290/com.vivid.sharedpreferences D/map values: name: Nithin
08-30 15:14:10.858 30290-30290/com.vivid.sharedpreferences D/map values: email: Nithin

我之前添加了两个nameemail的值,但这里没有显示。任何人都可以帮我解决这个问题吗?

这是我的程序

  sPref = this.getSharedPreferences("com.vivid",this.MODE_PRIVATE);
    sEditor = sPref.edit();


 btnSave.setOnClickListener(new View.OnClickListener() {
     @Override
     public void onClick(View view) {

         sEditor.putString(PREF_NAME,edtName.getText().toString());
         sEditor.putString(PREF_EMAIL,edtEmail.getText().toString());
         sEditor.commit();
     }
 });


    btnRetrieve.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            if (sPref.contains(PREF_NAME)){

                edtName.setText(sPref.getString(PREF_NAME,null));
            }


            if (sPref.contains(PREF_EMAIL)){

                edtEmail.setText(sPref.getString(PREF_EMAIL,null));
            }
        }
    });


    btnClear.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            sEditor.clear();
            sEditor.commit()
        }
    });


}

public void getAllValues(){

    Map<String, ?> allEntries = sPref.getAll();
    for (Map.Entry<String, ?> entry : allEntries.entrySet()) {
        Log.d("map values", entry.getKey() + ": " + entry.getValue().toString());
    }
}

@Override
protected void onStop() {
    super.onStop();

    getAllValues();
}

1 个答案:

答案 0 :(得分:2)

  

我之前添加了两个名称和电子邮件值,但这里没有显示

这是预期的行为。您无法为键设置多个值。如果使用相同的键写入新值,则会覆盖旧值。