我正在处理我的应用,并且我使用共享偏好设置。它的使用起作用以及如何应用它。当它保存我的信息时,它会用第二组信息替换第一个输入的值。有没有办法在一个共享首选项文件中保存多个值?
答案 0 :(得分:0)
SharedPreferences是一个键值存储,类似于Java Map对象。这意味着对于每个键,您只能存储一个值。
但是,一个SharedPreferences文件可以包含许多键。
如果使用单个键存储有限数量的项目,则可以执行一些简单的序列化,例如将值放在单个逗号分隔的String中。
有关更长的信息列表,您可能需要考虑SQLite数据库或您自己的基于文件的存储方法。
答案 1 :(得分:0)
如果第二组值正在替换第一组,则可能意味着您使用与第一组完全相同的键保存第二组。
尝试使用其他键保存第二组值:
editor.putString("key1", value1);
editor.putString("key2", value2);
editor.apply(); // Or commit, whichever suits your need
更新示例
int counter = 0;
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// If you want to use username as key and password as value
saveUsernameAsKey();
// If you just want to use a different key everytime you click,
// you could try using a counter
// This will use key "Username0", "Username1", "Username2"...
saveUsername("Username" + counter);
counter++;
}
});
public void saveUsernameAsKey() {
userPref = getSharedPreferences("MyUsernames", Context.MODE_PRIVATE);
EditText username = (EditText) findViewById(R.id.txtEnterUserName);
EditText password = (EditText) findViewById(R.id.txtEnterPassword);
SharedPreferences.Editor editor = userPref.edit();
editor.putString(username.getText().toString(), password.getText().toString());
editor.apply();
}
public void saveUsernames(String usernameKey) {
userPref = getSharedPreferences("MyUsernames", Context.MODE_PRIVATE);
EditText username = (EditText) findViewById(R.id.txtEnterUserName);
SharedPreferences.Editor editor = userPref.edit();
editor.putString(usernameKey, username.getText().toString());
editor.apply();
}