Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/229.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 如何将服务器上的验证错误消息绑定到版面上相应的“EditText”?_Android_Json_Validation - Fatal编程技术网

Android 如何将服务器上的验证错误消息绑定到版面上相应的“EditText”?

Android 如何将服务器上的验证错误消息绑定到版面上相应的“EditText”?,android,json,validation,Android,Json,Validation,我有来自服务器的下一个验证响应(由symfony2生成) 我可以解析这个JSONresponse,获取类ValidationResponse的对象: @JsonIgnoreProperties(ignoreUnknown = true) public class ValidationResponse{ ... @JsonProperty("username") private String userNameError; } 现在我在布局中有了EditText-mEdit

我有来自服务器的下一个验证响应(由
symfony2
生成)

我可以解析这个
JSON
response,获取类
ValidationResponse
的对象:

@JsonIgnoreProperties(ignoreUnknown = true)
public class ValidationResponse{
    ...
    @JsonProperty("username")
    private String userNameError;
}
现在我在布局中有了
EditText-mEditTextUserName
,并且
userNameError=“该值不应为空。”

我不想检查
ValidationResponse
中的所有字段是否有大量
if-else
结构的错误消息

if(!TextUtils.isEmpty(validationResponse.getUserNameError())){
            mEditTextUserName.setError(validationResponse.getUserNameError());
            mEditTextUserName.requestFocus();
}
这将在我的项目中带来很多不需要的代码,用于“简单”表单字段验证

作为替代方案, 我可以创造

HashMap<String, EditText> editFields;
...
editFields.put("username", mEditTextUserName);
...
// send request, parse validation response
((EdiText)editFields.get("username")).setError(validationError.getUserNameError());
HashMap编辑字段;
...
editFields.put(“用户名”,mEditTextUserName);
...
//发送请求,解析验证响应
((EdiText)editFields.get(“用户名”)).setError(validationError.getUserNameError());
但我不喜欢这个解决方案


有没有一种方法可以使用
注释
或其他语言构造将验证错误消息从
JSON
服务器绑定到
EditText
错误?

以我的拙见,您正在使自己的工作复杂化,并在这个问题上浪费时间。如果您有对应于
JSON
字段的
EditText
s的确切数量,那么就没有必要找出一些复杂的实现。最后,它可能会使代码事件更难阅读

您必须保留对所有
EditText
视图的引用,对吗?使用
HashMap
的替代方案不会给您带来任何好处。您唯一能做的就是创建检查
EditText
和错误值的方法

private void setEditTextAndValidate(EditText editText, String errorMsg) {
    if(!TextUtils.isEmpty(errorMsg)){
            editText.setError(errorMsg);
            editText.requestFocus();
    }
}
然后打电话

setEditTextAndValidate(mEditTextUserName, validationResponse.getUserNameError());
setEditTextAndValidate(mEditTextPassword, validationResponse.getPasswordError());

再一次,我想分享我的观点。也许有一些框架可以为您做到这一点,但我怀疑它是否值得您这么做。

我想说的是,您可以拥有大量的
EditText
字段,每个字段都有一个ValidationResponse?我在ValidationResponse中将EditText字段的精确计数作为“children”的计数。editTextUserName=“username”,editTextPassword=“password”,等等。这是一个好的。我正在寻找更清晰的解决方案,在这里我可以处理验证响应,并将错误传递给ex的for each循环中的EditText。如果您遍历响应列表,只使用用户名并应用于不同的EditText,我会理解这种方法。但是您必须显式地调用响应方法并分配给特定的视图。它必须在某个地方编码。寻找一些带有绑定配置的通用代码将创建大量复杂的代码。也许你会把它分开放在某个地方(移动到包中),但这不值得。谢谢,这对我很有用@请你能给我你对这个问题的看法吗
setEditTextAndValidate(mEditTextUserName, validationResponse.getUserNameError());
setEditTextAndValidate(mEditTextPassword, validationResponse.getPasswordError());