Android Kotlin注册页:If校验语句正确但未正常生效
问题原因
你的代码存在两个核心逻辑错误,导致即使填了内容也会触发空值提示:
- 取值时机错误:你在
onCreate页面刚加载完成时,就调用text.toString()获取了三个输入框的内容,此时用户还没做任何输入,三个变量存的永远是空字符串。后续点击按钮校验时,用的始终是初始化时拿到的空值,和用户实际输入的内容无关。 - 空值判断逻辑错误:
isValid方法里用了email.isNullOrEmpty() && pass.isNullOrEmpty()做判断,逻辑与的意思是只有邮箱和密码同时为空才会触发填空提示,不符合“只要有任意一项为空就提示”的校验需求,同时你还漏了二次确认密码pass2的空值校验。
另外你当前的弹窗逻辑也有问题:不管校验是否通过,点击按钮后都会立刻执行dialog.dismiss()关闭弹窗,不符合加载弹窗的交互预期。
修复方案
- 变量定义时保存
EditText控件实例,不要提前取文本值,等用户点击注册按钮时再实时获取输入内容 - 修正空值判断逻辑,将逻辑与
&&替换为逻辑或||,补上二次密码的空值校验 - 调整弹窗的关闭时机,校验不通过时不需要弹出加载框,校验通过后弹出加载框,等注册逻辑执行完成再关闭
修复后的完整代码如下:
class SignUp : AppCompatActivity() { private lateinit var auth: FirebaseAuth // 改为保存EditText实例,不要提前存储文本值 private lateinit var etEmail: EditText private lateinit var etPass: EditText private lateinit var etPass2: EditText private lateinit var btn: Button override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_sign_up) // 初始化控件 auth = Firebase.auth etEmail = findViewById(R.id.et_email) etPass = findViewById(R.id.pass) etPass2 = findViewById(R.id.et_pass2) btn = findViewById(R.id.btn_create) // 加载弹窗 val dialog = Dialog(this) dialog.setContentView(R.layout.custom_dialog) btn.setOnClickListener { // 点击按钮时再实时获取用户输入的内容 val email = etEmail.text.toString().trim() val pass = etPass.text.toString() val pass2 = etPass2.text.toString() if (isValid(email, pass, pass2)){ dialog.show() // 此处编写Firebase注册逻辑,注册流程走完后再关闭弹窗 Toast.makeText(this,"Done", Toast.LENGTH_SHORT).show() dialog.dismiss() } } } private fun isValid(email: String?, pass: String?, pass2: String?): Boolean{ return if (email.isNullOrEmpty() || pass.isNullOrEmpty() || pass2.isNullOrEmpty()){ Toast.makeText(this, "Fill in the blanks", Toast.LENGTH_SHORT).show() false }else if (pass != pass2){ Toast.makeText(this, "Password do not match", Toast.LENGTH_SHORT).show() false }else{ true } } }
额外优化建议
- 可以补充邮箱格式校验、密码长度校验(Firebase要求密码长度至少6位),避免提交无效注册请求到Firebase
- 加载弹窗建议设置
setCancelable(false),避免用户在校验/注册过程中点击外部关闭弹窗
内容的提问来源于stack exchange,提问作者Victor kiptoo
相关产品推荐
相关产品推荐

