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

     
  • 相关阅读:
    来换网心得总结
    关于项目来换网
    数据库设计源代码
    自我介绍
    WC项目
    关于《现代软件工程》此书的疑问
    Swift基础语法(常量变量、数据类型、元组、可选、断言等)
    grunt快速学习
    Swift语言简介
    Swift简单入门教程:30分钟玩转Swift
  • 原文地址:https://www.cnblogs.com/wangpf/p/4190690.html
Copyright © 2020-2023  润新知