如何从 Android 中的 SharedPreferences 获取用户名和密码?

How can I get username and password from SharedPreferences in Android?

我正在尝试恢复用户名和密码以便能够开始会话。 这些是 sharedPreferences 的用户。

<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
    <string name="admin">1234</string>
    <string name="user">user0987</string>
</map>

这就是方法

login.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        SharedPreferences sp1 = MainActivity.this.getSharedPreferences("data", Context.MODE_PRIVATE);
        String user = sp1.getString(userInput.getText().toString(), "User not found");
        String pass = sp1.getString(passwordInput.getText().toString(), "Password is not correct");
        
        if(user.equals(userInput.getText().toString()){
            Toast.makeText(MainActivity.this, "User Exists", Toast.LENGTH_SHORT).show();
        } else{
            Toast.makeText(MainActivity.this, "User not found", Toast.LENGTH_SHORT).show();
        }

    }
});

这是将数据放入 SharedPreferences 的代码

register.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
       
        String user = userInput.getText().toString();
        String pass = passwordInput.getText().toString();

        if(user.isEmpty()){
            error.show();
        } else if (pass.isEmpty()){
            error2.show();
        } else{
            SharedPreferences sp=getSharedPreferences("data", Context.MODE_PRIVATE);
            SharedPreferences.Editor Ed=sp.edit();
            Ed.putString(user,pass);
            Ed.commit();
            Toast.makeText(MainActivity.this, "Register completed", Toast.LENGTH_SHORT).show();
        }

    }
});

您需要在 SharedPreferences 编辑器中添加用于保存数据的密钥。

目前您使用输入的用户名作为键,它可以根据在edittext中输入的数据进行更改,因为用户不会每次都输入相同的用户名,而是用于保存和获取数据to/from SharedPreferences 我们需要一个特定的密钥。

您可以添加用于保存用户名和密码的密钥,如下代码:

 SharedPreferences sp=getSharedPreferences("data", Context.MODE_PRIVATE);
 SharedPreferences.Editor ed=sp.edit();
 ed.putString("user",user);
 ed.putString("pass",pass);
 ed.commit();

获取数据

SharedPreferences sp1 = getSharedPreferences("data", Context.MODE_PRIVATE);
String userName = sp1.getString("user", "User not found");
String password = sp1.getString("pass", "Password is not correct");

有关 Sharedpref 的更多信息,请查看 Official documentation for Save key-value data using SharedPreferences

当您从 SP 检索数据时,请尝试使用下一个代码:

SharedPreferences sp1 = MainActivity.this.getSharedPreferences("data", Context.MODE_PRIVATE);
String pass = sp1.getString(userInput.getText().toString(), null);
if (pass != null) {
    Toast.makeText(MainActivity.this, "User Exists", Toast.LENGTH_SHORT).show();
} else{
    Toast.makeText(MainActivity.this, "User not found", Toast.LENGTH_SHORT).show();
}

你保存的数据是“user:password”的形式,所以你需要用同样的方式获取它,使用用户名作为key。