Android Studio(Java)登录页任意输入均提示登录成功问题排查
问题原因
你代码的核心错误是取值时机完全错了:
- 注册页在
onCreate方法里刚加载完布局,就立刻调用getText()读取三个输入框的内容,此时用户还没来得及输入任何信息,取到的Username、Email、Password全是空字符串,点注册按钮传给登录页的本来就是两个空值。 - 登录页犯了一模一样的错误:刚初始化完输入框控件,就立刻读取输入内容存到
Signuser、Signpw变量里,这时候登录页的输入框也是空的,两个变量存的同样是空字符串。 - 你把登录判断的逻辑写在按钮点击事件里,但判断用的变量从页面加载完成后就再也没更新过,永远是两个空字符串。空字符串和空字符串做
equals对比永远返回true,所以不管你后续在输入框里填什么内容,判断条件都成立,固定弹出登录成功提示。
修正方案
核心改动逻辑:所有读取输入框内容的操作,都要放到用户触发提交的点击事件里执行,保证每次点击都能拿到用户最新输入的内容。
- 注册页修正:把读取输入框内容的代码,从
onCreate里挪到注册按钮的点击事件中,点击跳转前先校验内容是否为空,避免传空值。
修正后的注册页核心代码:String Username,Email,Password; Button btn; EditText uname,email,pw; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); uname = (EditText) findViewById(R.id.uname); email = (EditText) findViewById(R.id.email); pw = (EditText) findViewById(R.id.pw); btn = (Button) findViewById(R.id.signupbtn); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // 点击注册时再实时读取输入,trim()用来去掉首尾误输入的空格 Username = uname.getText().toString().trim(); Email = email.getText().toString().trim(); Password = pw.getText().toString().trim(); // 空值校验,信息没填全就不跳转 if (Username.isEmpty() || Email.isEmpty() || Password.isEmpty()) { Toast.makeText(SignUpActivity.this, "请填写完整注册信息", Toast.LENGTH_SHORT).show(); return; } Intent intent = new Intent(SignUpActivity.this, Signin.class); intent.putExtra("USER", Username); intent.putExtra("PASS", Password); startActivity(intent); } }); } - 登录页修正:把读取用户输入账号密码的代码,从
onCreate里挪到登录按钮的点击事件中,每次点击登录时实时获取最新输入做对比。
修正后的登录页核心代码:EditText USERNAME, PASSWORD; TextView showusername; Button signinbtn; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_signin); // 取Intent传递的注册数据,加final保证点击事件里能访问 final String SavedUser = getIntent().getStringExtra("USER"); final String SavedPass = getIntent().getStringExtra("PASS"); USERNAME = (EditText)findViewById(R.id.Userenter); PASSWORD = (EditText)findViewById(R.id.passenter); signinbtn = (Button)findViewById(R.id.signinbtn); showusername = (TextView)findViewById(R.id.ShowUser); showusername.setText(SavedUser); signinbtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // 点击登录时再实时读取输入内容 String Signuser = USERNAME.getText().toString().trim(); String Signpw = PASSWORD.getText().toString().trim(); if (Signuser.equals(SavedUser) && Signpw.equals(SavedPass)) { Toast.makeText(Signin.this, "Login Successful", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(Signin.this, "账号或密码错误", Toast.LENGTH_SHORT).show(); } } }); }
开发提示:读取用户输入的文本时,建议统一加上
.trim()方法,能自动过滤掉用户不小心输入的首尾空格,避免因为无意义的空格导致校验不通过。
内容的提问来源于stack exchange,提问作者Shahzad Ahmed
相关产品推荐
相关产品推荐

