android - 如何在 android 中使用 Shared Preference 来比较两个字符串并执行操作
问题描述
我已经创建了注册和登录表单。我的数据将存储在SharedPreferences
. 当我在登录表单中输入电子邮件和密码时,它应该与我在注册表单中提供的详细信息进行比较并导航到另一个Activity
。但是,当我输入详细信息时,它没有按预期工作并显示我提供的消息Toast
。以下是注册和登录文件。
注册码:
public class SignUp extends AppCompatActivity {
EditText name,email,password,mobile,securityAnswer;
Spinner spinner;
Button signup,clear;
public static SharedPreferences sp;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sign_up);
//Getting id's
name = findViewById(R.id.name);
email = findViewById(R.id.email);
password = findViewById(R.id.pass);
mobile=findViewById(R.id.number);
securityAnswer=findViewById(R.id.spanswer);
signup=findViewById(R.id.signup);
clear=findViewById(R.id.clear);
spinner=findViewById(R.id.spinner);
//Creating file called UserDetails
sp=getSharedPreferences("UserDetails",MODE_PRIVATE);
//Questions to be inserted in spinner
String[] questions={"Select security question","Who is your favourite actor","What is your first school name","Who is the founder of android","What was your first mobile number","What was your favourite childhood cartoon program"};
ArrayAdapter adapter=new ArrayAdapter(getApplicationContext(),android.R.layout.simple_spinner_item,questions);
spinner.setAdapter(adapter);
//Setting Listener to submit button
signup.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//Getting the data from user
String userName=name.getText().toString();
String userEmail=email.getText().toString();
String userPass=password.getText().toString();
String userMobile=mobile.getText().toString();
String userQuestion=spinner.getSelectedItem().toString();
String userAnswer=securityAnswer.getText().toString();
//Inserting the data into SharedPreference
SharedPreferences.Editor editor=sp.edit();
editor.putString("NAME",userName);
editor.putString("EMAIL",userEmail);
editor.putString("PASSWORD",userPass);
editor.putString("MOBILE",userMobile);
editor.putString("QUESTION",userQuestion);
editor.putString("ANSWER",userAnswer);
editor.commit();
Toast.makeText(SignUp.this, "Data Submitted Successfully", Toast.LENGTH_SHORT).show();
startActivity(new Intent(getApplicationContext(),Login.class));
}
});
//Setting Listener to clear button
clear.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
name.setText("");
email.setText("");
password.setText("");
mobile.setText("");
spinner.setSelection(0);
securityAnswer.setText("");
}
});
}
}
登录代码:
public class Login extends AppCompatActivity {
//Declaring widgets
EditText email,password;
Button login,clear;
TextView forgot;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
//Finding id's for each widget
email=findViewById(R.id.loginemail);
password=findViewById(R.id.loginpassword);
login=findViewById(R.id.login);
clear=findViewById(R.id.clearlogin);
forgot=findViewById(R.id.forgotpassword);
//Setting Listener to Login Button
login.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
compareData();
}
});
//Setting Listener to clear button
clear.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
email.setText("");
password.setText("");
}
});
//Setting Listener to forgot password TextView
forgot.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
startActivity(new Intent(getApplicationContext(),ForgotPassword.class));
}
});
}
public void compareData(){
//Getting Text from user and converting to String
String login_email=email.getText().toString();
String login_password=password.getText().toString();
//Getting the stored data from sharedPreferences given by user while sign up
String sp_email=SignUp.sp.getString("EMAIL","Email is not available");
String sp_pass=SignUp.sp.getString("PASSWORD","Password is incorrect");
//Comparing email & password inserted by user while sign up and login
//if same,navigate to home screen.If not,Display the message.
if(login_email==sp_email){
if(login_password==sp_pass){
startActivity(new Intent(getApplicationContext(),HomeScreen.class));
}
}else{
Toast.makeText(Login.this, "Please Enter Correct details", Toast.LENGTH_SHORT).show();
}
}
}
解决方案
你必须String.equals()
不使用==
所以改变这个
if(login_email==sp_email){
if(login_password==sp_pass){
startActivity(new Intent(getApplicationContext(),HomeScreen.class));
}
}
至
if(login_email.equals(sp_email)){
if(login_password.equals(sp_pass)){
startActivity(new Intent(getApplicationContext(),HomeScreen.class));
}
}
推荐阅读
- android - 将渐变约束为圆形
- c# - 覆盖默认错误页面 500.30 - ASP.NET Core 应用程序无法启动
- python - 垂直打印字典,水平打印嵌套列表
- android - 我可以使用私有库来共享项目之间的依赖关系吗?
- javascript - 如何从数组中获取对象值,使其成为另一个数组的元素
- javascript - 在同一个 React 组件 React 的两个特定实例之间共享状态
- css - 元素应相对于其父元素的宽度响应地调整大小,而不超过其原始大小
- html - CSS 剪辑路径 - 无效的属性值
- node.js - 在节点中使用 Mocha 的代码覆盖率问题
- python - 当列表理解不起作用时,标准循环起作用