此代码应返回首选项中的所有值
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
我之前添加了两个name
和email
的值,但这里没有显示。任何人都可以帮我解决这个问题吗?
这是我的程序
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();
}
答案 0 :(得分:2)
我之前添加了两个名称和电子邮件值,但这里没有显示
这是预期的行为。您无法为键设置多个值。如果使用相同的键写入新值,则会覆盖旧值。