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对象中的。

 
时间: 2024-10-29 05:01:32

Android利用反射机制为实体类属性赋值的相关文章

java利用反射机制完成JavaBean的属性赋值

今天碰到一个场景,就是一个JavaBean,有些属性的值需要去数据库其他表中获取,这样就需要调用其他dao方法得到这个值,然后再set进去. 可是问题来了,如果需要用这种方式赋值的属性特别多的话,一个一个set进去就需要写很多set方法,代码不仅冗余,而且很麻烦. 于是就想通过反射机制去自动set值. 假设有JavaBean为CreditRatingFile.java类,某些属性值需要调用CreditRatingFileApplyService类中的方法获得,并拿到返回值再set出这些属性. 一

利用反射机制,获取类的字段、方法、并实现简单调用

这篇文章是为之后要介绍Android的ICO框架做预备的,所以,如果想最近学习Android的ICO框架的同学,可以稍微看一下. 首先,简单介绍一下Java里面的反射. JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制. 不知道这样的一段解释,你能否看懂.如果更简单的说,反射就是能够根据你给出类名实例化出一个实实在在的对象.所以,对象的实例

java利用反射机制判断对象的属性是否为空

java利用反射机制判断对象的属性是否为空: Map<String,String> validateMap = new LinkedHashMap<String, String>(); validateMap.put("serial", "编号");validateMap.put("major", "专业"); public static <T> String validateFiledIs

当实体类属性超多时候 映射给实体类属性赋值(拉姆达+实体类映射)

{                                 attributeSumValue=  beforEntity.Sum(e => Convert.ToDecimal( e.GetType().GetProperties().Where(o => o.Name == attributeName).Single().GetValue(e, null)));                                 var attributeBefName = "

利用反射机制,对对象的属性值进行自动设置

import java.lang.reflect.Method; /** * 对象的属性值自动设置,利用反射机制 */ public class AutoSet { /** * 将源对象的属性值赋值到目标对象,属性名一致,且源对象有get方法,目标对象有set方法 * @param src 源对象 * @param target 目标对象 * @return 赋值后的目标对象 */ public static Object autoGetterAndSetter(Object src, Obje

java android布局里的控件值 反射绑定给实体类,实体类绑定给控件,表单提交绑定很有用

注意了:根据实际情况,添加实体里字段的类型,控件类型的判断才可使用.这里控件只有TextView EditText 实体类字段只有String int类型,带值的控件添加tag ,值和实体类的字段值一致 package ice.ui.service; import java.lang.reflect.Field;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import jav

android中反射机制

本文介绍Android反射机制实现与原理,在介绍之前,要和Java进行比较,所以先看下Java中的反射相关知识: 一.反射的概念及在Java中的类反射 反射主要是指程序可以访问.检测和修改它本身状态或行为的一种能力.在计算机科学领域,反射是一类应用,它们能够自描述和自控制.这类应用通过某种机制来实现对自己行为的描述和检测,并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关的语义. 在Java中的反射机制,被称为Reflection(大家看到这个单词,第一个想法应该就是去开发文档中

NPOI操作excel——利用反射机制,NPOI读取excel数据准确映射到数据库字段

> 其实需求很明确,就是一大堆不一样的excel,每张excel对应数据库的一张表,我们需要提供用户上传excel,我们解析数据入库的功能实现. 那么,这就涉及到一个问题:我们可以读出excel的表头,但是怎么知道每个表头具体对应数据库里面的字段呢? 博主经过一段时间的思考与构思,想到一法:现在的情况是我们有excel表A,对应数据库表B,但是A与B具体属性字段的映射关系我们不知.那我们是不是可以有一个A到B的映射文件C呢? 我想,说到这,大家就很明了了... 第一步:为每张excel创建一个与

C#利用反射,遍历获得一个类的所有属性名,以及该类的实例的所有属性的值

转自goldeneyezhang原文 C#利用反射,遍历获得一个类的所有属性名,以及该类的实例的所有属性的值 C#利用反射,遍历获得一个类的所有属性名,以及该类的实例的所有属性的值总结: 对应某个类的实例化的对象tc, 遍历获取所有属性(子成员)的方法(采用反射): Type t = tc.GetType();//获得该类的Type //再用Type.GetProperties获得PropertyInfo[],然后就可以用foreach 遍历了 foreach (PropertyInfo pi