共享首选项删除第一个输入的值

时间:2016-11-07 20:02:18

标签: android android-sharedpreferences

我正在处理我的应用,并且我使用共享偏好设置。它的使用起作用以及如何应用它。当它保存我的信息时,它会用第二组信息替换第一个输入的值。有没有办法在一个共享首选项文件中保存多个值?

2 个答案:

答案 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();
}