Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/200.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 当用户在Kotlin中填写输入时,处理多个错误_Android_Kotlin - Fatal编程技术网

Android 当用户在Kotlin中填写输入时,处理多个错误

Android 当用户在Kotlin中填写输入时,处理多个错误,android,kotlin,Android,Kotlin,我对Kotlin很陌生(而且我从来没有用Java编写过代码),我想知道是否有其他方法可以做到这一点,或者是否可以 为了让您了解上下文,我正在使用模型视图演示器。这里的演示者从登录屏幕接收用户名和登录名,为了处理错误(如空字段、无效电子邮件),我创建了一个枚举(可能有错误),然后通过检查条件填充这些错误的列表 演示者: fun onLoginButtonClicked(email: String, password: String) { val errorEnum = mutabl

我对Kotlin很陌生(而且我从来没有用Java编写过代码),我想知道是否有其他方法可以做到这一点,或者是否可以

为了让您了解上下文,我正在使用模型视图演示器。这里的演示者从登录屏幕接收用户名和登录名,为了处理错误(如空字段、无效电子邮件),我创建了一个枚举(可能有错误),然后通过检查条件填充这些错误的列表

演示者:

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,输入应该被验证,错误应该在用户键入时通知用户,而不是让他们等待填充所有内容,然后一次性抛出所有错误。