Android 当用户在Kotlin中填写输入时,处理多个错误
我对Kotlin很陌生(而且我从来没有用Java编写过代码),我想知道是否有其他方法可以做到这一点,或者是否可以 为了让您了解上下文,我正在使用模型视图演示器。这里的演示者从登录屏幕接收用户名和登录名,为了处理错误(如空字段、无效电子邮件),我创建了一个枚举(可能有错误),然后通过检查条件填充这些错误的列表 演示者:Android 当用户在Kotlin中填写输入时,处理多个错误,android,kotlin,Android,Kotlin,我对Kotlin很陌生(而且我从来没有用Java编写过代码),我想知道是否有其他方法可以做到这一点,或者是否可以 为了让您了解上下文,我正在使用模型视图演示器。这里的演示者从登录屏幕接收用户名和登录名,为了处理错误(如空字段、无效电子邮件),我创建了一个枚举(可能有错误),然后通过检查条件填充这些错误的列表 演示者: fun onLoginButtonClicked(email: String, password: String) { val errorEnum = mutabl
fun onLoginButtonClicked(email: String, password: String) {
val errorEnum = mutableListOf<ErrorEnum>()
if (email.isEmpty()) errorEnum.add(ErrorEnum.EMPTY_EMAIL)
if (password.isEmpty()) errorEnum.add(ErrorEnum.EMPTY_PASSWORD)
if (email.isNotEmpty() && !Patterns.EMAIL_ADDRESS.matcher(email).matches()) errorEnum.add(ErrorEnum.INVALID_EMAIL)
if (errorEnum.isEmpty()) {
userSession.email = email
userSession.password = password
view?.goToViewPager(email)
} else {
view?.checkErrors(errorEnum)
}
}
fun onLoginButtonClicked(电子邮件:字符串,密码:字符串){
val errorEnum=mutableListOf()
if(email.isEmpty())errorEnum.add(errorEnum.EMPTY_email)
if(password.isEmpty())errorEnum.add(errorEnum.EMPTY_password)
if(email.isNotEmpty()&&!Patterns.email\u ADDRESS.matcher(email.matches())errorEnum.add(errorEnum.INVALID\u email)
if(errorEnum.isEmpty()){
userSession.email=电子邮件
userSession.password=密码
查看?.goToViewPager(电子邮件)
}否则{
查看?.checkErrors(errorEnum)
}
}
之后,片段在视图上反映错误,并遍历列表
片段:
override fun checkErrors(Errors: MutableList<ErrorEnum>) {
Errors.forEach {
when (it) {
ErrorEnum.EMPTY_PASSWORD -> binding.password.error = getString(R.string.login_alert_input)
ErrorEnum.INVALID_EMAIL -> binding.email.error = getString(R.string.login_alert_bad_email)
ErrorEnum.EMPTY_EMAIL -> binding.email.error = getString(R.string.login_alert_input)
}
}
}
覆盖趣味检查错误(错误:可变列表){
弗雷奇{
什么时候{
ErrorEnum.EMPTY\u PASSWORD->binding.PASSWORD.error=getString(R.string.login\u alert\u输入)
ErrorEnum.INVALID_EMAIL->binding.EMAIL.error=getString(R.string.login_alert_bad_EMAIL)
ErrorEnum.EMPTY\u EMAIL->binding.EMAIL.error=getString(R.string.login\u alert\u输入)
}
}
}
很明显,您在这里做的是多余的工作,首先您要建立列表
,然后将列表
传递给视图
,再次视图
正在做一些迭代和比较的工作,相反,您可以在视图中使用单独的方法来处理每个方法,而无需进行比较,并直接调用它们
override fun showEmailInvalidError() {
binding.password.error = getString(R.string.login_alert_input)
}
override fun showEmptyEmailError() {
binding.email.error = getString(R.string.login_alert_input)
}
override fun showEmptyPasswordError() {
binding.email.error = getString(R.string.login_alert_bad_email)
}
在演讲者中
fun onLoginButtonClicked(email: String, password: String) {
if(email.isEmpty()) view?.showEmptyEmailError()
if(password.isEmpty()) view?.showEmptyPasswordError()
if(email.isNotEmpty() && !Patterns.EMAIL_ADDRESS.matcher(email).matches())
view?.showEmailInvalidError()
if(errorEnum.isEmpty()) {
userSession.email = email
userSession.password = password
view?.goToViewPager(email)
}else {
view?.checkErrors(errorEnum)
}
}
我不认为堆栈溢出处理编码审查,如果这是你在这里要求的,你是对的!这似乎更好。也许这超出了当前问题的范围,但在我必须检查更多空字段(如20个字段)的情况下,实现这一点的唯一方法是向视图中添加方法?理想情况下,是的,对于如此庞大的表单也存在捆绑错误,这不是一个好的UX,输入应该被验证,错误应该在用户键入时通知用户,而不是让他们等待填充所有内容,然后一次性抛出所有错误。