zoukankan      html  css  js  c++  java
  • Java 用反射进行Bean类的数据解析与装入

    前言

      下面的代码用Android的SharedPreferences来解析后保存一个Bean对象,或者解析后返回一个Bean对象,这里临时记录。后续会完善

    解析实例并且保存

    public static void putObject(String key, Object object) {
            Class data = object.getClass();       //获取对象的类
            Field[] fields = data.getDeclaredFields(); //获取类的声明字段数组
            for (int i = 0; i < fields.length; i++) {
                Field f = fields[i];
                f.setAccessible(true);
                try {
                    String spKey = key + f.getName(); //获取字段的名称
                    Object value = f.get(object);   //根据字段名称获取值
                    if (value instanceof Integer) {
                        put(spKey, (int) value);
                    } else if (value instanceof String) {
                        put(spKey, (String) value);
                    } else if (value instanceof Boolean) {
                        put(spKey, (boolean) value);
                    } else if (value instanceof Float) {
                        put(spKey, (float) value);
                    } else if (value instanceof Long) {
                        put(spKey, (long) value);
                    }else if (value instanceof Object){
                        GsonBuilder gsonb = new GsonBuilder();
                        Gson gson = gsonb.create();
                        String json = gson.toJson(value);
                        put(spKey, json);
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }

    装载并且返回实例

    public static <T> T getObject(String key, Class<T> c) {
            T data = null;
            try {
                data = c.newInstance();         //实例传入的类
            } catch (InstantiationException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
    
            if (data == null)
                return data;
    
            Field[] fields = c.getDeclaredFields();     //获取声明字段数组
            for (int i = 0; i < fields.length; i++) {
                Field f = fields[i];
                f.setAccessible(true);
                try {
                    String spKey = key + f.getName(); //获取字段名称
                    Class valueType = f.getType();      //获取字段类型
                    if (valueType == String.class) {    //字段为String类型
                        f.set(data, get(spKey, ""));
                    } else if (valueType.getSuperclass() ==Object.class){   //字段是一个Object
                        String jsonObjext = get(spKey, "");
                        GsonBuilder gsonb = new GsonBuilder();
                        Gson gson = gsonb.create();
                        if (!"".equals(jsonObjext) ) {
                            f.set(data, gson.fromJson(jsonObjext,valueType));
                        }else {
                            f.set(data,null);
                        }
                    }else if (valueType == int.class || valueType == Integer.class) {   //字段是整数类型
                        f.set(data, get(spKey, 0));
                    } else if (valueType == boolean.class || valueType == Boolean.class) {  //字段是布尔值类型
                        f.set(data, get(spKey, false));
                    } else if (valueType == float.class || valueType == Float.class) {      //字段是浮点类型
                        f.set(data, get(spKey, 0f));
                    } else if (valueType == long.class || valueType == Long.class) {        //字段是Long类型
                        f.set(data, get(spKey, 0l));
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
    
            return data;
        }
  • 相关阅读:
    Android WiFi系统【转】
    Android Wifi简单的梳理【转】
    深入浅出
    ubuntu16.04固定IP与设置DNS【转】
    Linux内核同步【转】
    android的GPS代码分析JNI如何HAL之间如何设置回调函数【转】
    基于android的GPS移植调用关系【转】
    【转】使用XCODE 的SOURCE CONTROL 做版本控制 (1)
    Objective-C 记录
    【转】Xcode重构功能怎么用我全告诉你
  • 原文地址:https://www.cnblogs.com/guanxinjing/p/12295135.html
Copyright © 2011-2022 走看看