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());