0

嗨,我确定这很简单,只是让我无法理解 :-)

我正在编写一个简单的帮助程序类,以便能够检查字段数组中提供的值,这些字段说它们是正确的 EditText 小部件,我想要做的是能够访问输入到 EditText 中的输入值场,请帮忙?

Field[] fields = clazz.getFields();

    for (Field field : fields) {
        if (field.isAnnotationPresent(Required.class)) {
            Log.d(TestClass.class.getName(), field.toString());
        }
    }

提前致谢

更新问题完整代码

package com.mobiqube.annotations;

import java.lang.reflect.Field;

import android.util.Log;
import android.widget.EditText;

public class EditTextValidator {

public EditTextValidator() {
}

public Boolean validate(Class clazz) throws IllegalArgumentException, IllegalAccessException{
    Boolean isValid = true;
    Field[] fields = clazz.getFields();

    for (Field field : fields) {
        if (field.isAnnotationPresent(Required.class)) {
            Log.d(EditTextValidator.class.getName(), field.toString());
            if(field instanceof EditText){      
                EditText editText = (EditText)field ;
                String txt=editText.getText().toString();
                Log.d(EditTextValidator.class.getName(), txt);
            }

        }
    }

    return isValid;
}

public String getMessage(){
    String returnStr = "";
    return returnStr;
}

}

现在的错误

if(field instanceof EditText){ //

和 EditText editText = (EditText)field ;

4

4 回答 4

2

假设您有一个 clazz 类型的对象:

MyClass object = <something>

// clazz represent the class of this object
Class<?> clazz = object.getClass();
// Note that it can also be obtained by MyClass.class

// fields represent the members of MyClass
Field[] fields = clazz.getFields();

for (Field field : fields) {
    // field is a member of MyClass
    // To get the class of this member :
    Class<?> c = field.getType();
    // To get the value of the member in the object: (object is an instance of MyClass)
    Object o = field.get(object);
    // If you want to know if the field represent an EditText or a derived class :
    if (EditText.class.isAssignableFrom(c)) {
        EditText value = (EditText) field.get(object);
    }
}

关于您的问题,您需要尝试验证的对象,因为类本身是不够的(除非您只验证静态字段?)

于 2013-10-04T09:41:08.030 回答
1

尝试这个:

EditText[] fields = clazz.getFields();

for (EditText field : fields) {
   Log.e("result",field.getText().toString());
}
于 2013-10-04T09:03:00.127 回答
0

您好,您可以使用以下代码

if(field instanceof EditText){      
    EditText editText = (EditText)field ;
    String txt=editText.getText().toString();
}
于 2013-10-04T09:03:01.187 回答
0
AppCompatActivity activity=(AppCompatActivity)
Field id = R.id.class.getDeclaredField(field.getName());
EditText et= (EditText)activity.findViewById(id.getInt(id));

//or
AppCompatActivity activity=(AppCompatActivity)
EditText et= (EditText)activity.findViewById(id);
于 2020-01-20T20:37:51.607 回答