zoukankan      html  css  js  c++  java
  • 封装 Gson 解析Json到对象是否失败

    在使用Google的 Gson 类库解析 Json 数据时,难免会出现解析失败的情况。

    在这种情况下,使用 if(obj == null) 是不可行的,fromJson 方法会自动生成对象的实例,所以这样返回的结果都是true,当然也可以用 if (obj.Field == null && ……)这种方法,但这并不是最好的选择,所以就有了遍历对象的想法,通过反射获取对象的所有属性名,再通过属性名称获取属性值,也就有了isAnalysisFile 这个方法。

    反射获取对象所有属性名称 :

    public static String[] getObjectAllFiledName(Object obj){
                Field[] fields = obj.getClass().getDeclaredFields();
                String[] fieldsNames = new String[fields.length];
                for (int i = 0; i < fieldsNames.length; i++) {
                    fieldsNames[i] = fields[i].getName();
                }
                return fieldsNames;
         }

    反射获取对象所有属性值,根据GET方法获取。

    public static Object getFieldValueByName(String fieldName,Object obj) throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
             String firstLetter = fieldName.substring(0, 1).toUpperCase();    
             String getter = "get" +firstLetter+ fieldName.substring(1);
             Method method = obj.getClass().getMethod(getter, new Class[] {});
             Object valueArr = method.invoke(obj, new Object[] {});
             return valueArr; 
    	 }
    

    遍历对象所有属性值,判断是否为NULL,一般情况下只会出现两种情况,NULL和FALSE。

    因此只要有一个属性值为TRUE,直接返回结果,解析是成功的。

    如果全部为NULL和FALE,那么判定为解析失败。

    public static boolean isAnalysisFail(Object object){
    		String[] fields = getObjectAllFiledName(object);
    		boolean flag = true;
    		for (String string : fields) {
    			try {
    				Object obj = getFieldValueByName(string, object);
    				if(obj == null) {
    					flag = false;
    				}else if(Boolean.parseBoolean(obj.toString())){
    					return true;
    				}else {
    					flag = true;
    				}
    			} catch (NoSuchMethodException e) {
    
    				e.printStackTrace();
    			} catch (SecurityException e) {
    
    				e.printStackTrace();
    			} catch (IllegalAccessException e) {
    
    				e.printStackTrace();
    			} catch (IllegalArgumentException e) {
    
    				e.printStackTrace();
    			} catch (InvocationTargetException e) {
    
    				e.printStackTrace();
    			}
    		}
    		return flag; 
    	 }
    
     
    
    使用 :
    if (!Tools.isAnalysisFail(ipMaster)) {
                            msg = handler.obtainMessage();
                            msg.what = -1;
                            msg.obj = "送货单不存在";
                            handler.sendMessage(msg);
                        }
    
     
    
     
  • 相关阅读:
    September 29th 2017 Week 39th Friday
    September 28th 2017 Week 39th Thursday
    September 27th 2017 Week 39th Wednesday
    September 26th 2017 Week 39th Tuesday
    September 25th 2017 Week 39th Monday
    September 24th 2017 Week 39th Sunday
    angular2 学习笔记 ( Form 表单 )
    angular2 学习笔记 ( Component 组件)
    angular2 学习笔记 ( Http 请求)
    angular2 学习笔记 ( Router 路由 )
  • 原文地址:https://www.cnblogs.com/yangchaojie/p/9310333.html
Copyright © 2011-2022 走看看