Android 来自字符串的 EditText setError()

Android EditText setError() from string

我知道我必须遗漏一些东西。我收到一个 JSON 对象返回错误。

{
   "data": {
      "status": "error",
      "error": {
          "email": ["Email already registered"]
      }
    }
}

JSON键错误与EditText同名。我需要能够

email.setError("Email already registered");

Class.forName() 不会为它工作....我如何在 Android

中执行此操作

值在 Iterator 键中 = "email"

} else if (data.getString("status").equals("error")) {
    Log.d(Constants.LOG, "No Account Found Sending to Register!");   
    JSONObject errors = data.getJSONObject("error");
    for(Iterator<String> iter = errors.keys();iter.hasNext();) {
        String key = iter.next();
        Object value = errors.get(key);
        Log.d(Constants.LOG,value.toString().replace("[","").replace("]","").replace("\"",""));
                                ///Class<?> clasz = Class.forName(key);
     }
     Toast.makeText(getApplicationContext(), "Error:" + data.getString("error"), Toast.LENGTH_LONG).show();
}

如果您有 java 1.7 或更高版本

,可能的方法是对字段名称使用 switch 大小写
for(Iterator<String> iter = errors.keys();iter.hasNext();) {
    String key = iter.next();
    Object value = errors.get(key);
    Log.d(Constants.LOG,value.toString().replace("[","").replace("]","").replace("\"",""));
    switch(key) {
        case "email":
                    email.setError(value.toString());
                    break;
        case "name":
                    name.setError(value.toString());
                    break;
    }
 }

如果您不想使用 switch 大小写,您可以使用 Java Reflection API 实现同样的效果。