首页 > 代码库 > Android利用反射机制为实体类属性赋值

Android利用反射机制为实体类属性赋值

在做android项目时,有时会遇到从网络上获取json类型数据,赋值给实体类,实体类属性少可以一个一个的赋值,如果实体类有很多属性,赋值可能就要耗很长的功夫了,幸好Java给我们提供了反射机制。下面是在我在android中如何利用java反射机制给实体类赋值。

在Android中利用反射机制为实体类属性赋值,首先需要导入一下两个包


import java.lang.reflect.Field;

import java.lang.reflect.Method;

给实体类赋值首先需要一个实体类,这里面我就简单的定义一个学生实体类StudentInfoBean:

public class StudentInfoBean {    private int id;    private String stuName;    private String stuGender;    private String stuIdCard;    private String stuClass;    private String address;    public int getId() {        return id;    }    public void setId(int id) {        this.id = id;    }    public String getStuName() {        return stuName;    }    public void setStuName(String stuName) {        this.stuName = stuName;    }    public String getStuGender() {        return stuGender;    }    public void setStuGender(String stuGender) {        this.stuGender = stuGender;    }    public String getStuIdCard() {        return stuIdCard;    }    public void setStuIdCard(String stuIdCard) {        this.stuIdCard = stuIdCard;    }    public String getStuClass() {        return stuClass;    }    public void setStuClass(String stuClass) {        this.stuClass = stuClass;    }    public String getAddress() {        return address;    }    public void setAddress(String address) {        this.address = address;    }    }

下面定义一个Utils类,在Utils类中定义了一下方法,请看代码:

public class Utils {    private static final String TAG = "Utils";    public Object setObjectValue(Object object, String json) throws Exception {        if (object == null)            return null;        Log.d(TAG, "setObjectValue");        Class<?> clazz = object.getClass();        Field[] fields = clazz.getDeclaredFields();        for (Field field : fields) {            Log.d(TAG, "field type:" + field.getName());// 打印字段的类型            if (field.getGenericType().toString().equals("class java.lang.String")) {                Method method = object.getClass().getMethod("set" + getMethodName(field.getName()), String.class);                method.invoke(object, parseJson(json, field.getName()));            }            if (field.getGenericType().toString().equals("class java.lang.Integer"))//            {                Method method = object.getClass().getMethod("set" + getMethodName(field.getName()), Integer.class);                method.invoke(object, parseJson(json, field.getName()));            }                    }        return object;    }    /**     * 解析json     * */    private String parseJson(String json_string, String name) {        String str = "no info";        JSONObject json;        try {            json = new JSONObject(json_string);            json = json.getJSONObject("studentinfo");            str = json.getString(name);        } catch (JSONException e) {            e.printStackTrace();        }        return str;    }    /**     * 将属性名称的首字母变成大写     * */    public String getMethodName(String fieldName) {        byte[] bytes = fieldName.getBytes();        bytes[0] = (byte) (bytes[0] - ‘a‘ + ‘A‘);        return new String(bytes);    }}

在上面的代码中定义了一个setObjectValue方法,该方法接收两个参数,第一个是Object类型的参数,在这里面接收的是一个StudentInfoBean对象,第二个参数是String类型的json数据,是填充到StudentInfoBean对象中的。

 

Android利用反射机制为实体类属性赋值