码迷,mamicode.com
首页 > 移动开发 > 详细

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

时间:2014-12-28 23:24:49      阅读:347      评论:0      收藏:0      [点我收藏+]

标签:

在做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利用反射机制为实体类属性赋值

标签:

原文地址:http://www.cnblogs.com/wangpf/p/4190690.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!