gpt4 book ai didi

android - 如何将来自服务器的验证错误消息绑定(bind)到布局上相应的 `EditText`?

转载 作者:搜寻专家 更新时间:2023-11-01 07:57:47 24 4
gpt4 key购买 nike

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

{
"code":400,
"message":"Validation Failed",
"errors":{
"children":{
"username":{
"errors": [ "This value should not be blank." ]
}
}
}
}

我可以解析这个 JSON 响应,得到类 ValidationResponse 的对象:

@JsonIgnoreProperties(ignoreUnknown = true)
public class ValidationResponse{
...
@JsonProperty("username")
private String userNameError;
}

现在我在布局 EditText mEditTextUserNameuserNameError = "This value should not be blank."

我不想检查 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());

但我不喜欢这个解决方案。

有没有一种方法可以使用 annotations 或其他语言构造将来自服务器的 JSON 的验证错误消息绑定(bind)到 EditText 错误?

最佳答案

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

无论如何,您必须保留对所有 EditText View 的引用,对吗?替代 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());

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

关于android - 如何将来自服务器的验证错误消息绑定(bind)到布局上相应的 `EditText`?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25487064/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com