Android获取服务端数据解析保护
2016-06-22 22:52
411 查看
一.问题
踩了两三次坑了,项目中客户端获取到服务端数据格式是JSON格式的,我拿到JSON串时候会根据服务端协议解析成Map或者List,然后进一步解析相关Model,在解析成Model的过程中,由于字段缺失往往会导致空指针,解决方案很简单,在解析modle过程中加层保护;
二.解析封装
1.这里解析出问题都是在map的解析上,比如从服务端拿到的JSON解析成Map<String,Integer>
这种基本数据类型包装类value的map,然后我会去解析其中的value:int value = map.get(key)
,这里如果服务端给了脏数据,没有这个key,此时会出空指针,因为这里会有个包装类解包的过程;
2.还有一种情况是,服务端给出的JSON,客户端解析成Map
这里不知道它的value值是什么类型的,有可能是整形,也有可能是字符串,这时候如果统一当成整形来解析的话,也会出问题;
为了解决这样的问题,可以封装下解析类如下:
//整型 public static int parseInt(Map map, String key) { return parseInt(map, key, 0); } public static int parseInt(Map map, String key, int defaultValue) { if (null == map || null == key) { return defaultValue; } Object value = map.get(key); if (value instanceof Number) { return ((Number) value).intValue(); }else if (value instanceof String){ try { return Integer.parseInt((String)value); } catch (NumberFormatException e) { } } return defaultValue; } //boolean型 public static boolean parseBoolean(Map map, String key) { return parseBoolean(map, key, false); } public static boolean parseBoolean(Map map, String key, boolean defaultValue) { if (null == map || null == key) { return defaultValue; } Object value = map.get(key); if (value instanceof Number) { return ((Number) value).intValue() != 0; } if (value instanceof Boolean) { return ((Boolean) value).booleanValue(); } return defaultValue; } //字符串 public static String parseString(Map map, String key) { return parseString(map, key, null); } public static String parseString(Map map, String key, String defaultValue) { if (null == map || null == key) { return defaultValue; } Object value = map.get(key); if (value instanceof String) { return (String) value; }else if (value instanceof Number){ try { return String.valueOf(value); } catch (Exception e) { } } return defaultValue; }
其它数据类型,以此类推
如有不足的地方,还请大家多多指正相关文章推荐
- Android 2D翻转
- Android中的ViewRootImpl类源码解析
- Android SdCard写入权限
- Android初级教程理论知识(第九章多媒体编程)
- Android初级教程理论知识(第九章多媒体编程)
- Android FragmentStatePagerAdapter的写法
- Android PDF截取封面:PDF缩略图预览效果
- Android控件(1)--ActionBarDrawerToggle、DrawerLayout、ActionBar 使用说明
- android开发教程之listview使用方法
- android studio安卓项目出现Error: Default Activity Not Found错误无法编译的解决方案
- Android虚线
- Android日志与DDMS
- 【Android】PropertyAnimation属性动画
- android 使对话框同步显示
- Java/Android中的PBKDF2加密认证
- Java/Android中SHA1和SHA256加密
- Android开发学习之路-Volley源码解析
- Java/Android中的MD5加密加盐方法
- Android基于Google Zxing实现二维码/条形码扫描、生成二维码/条形码
- android-AccessibilityManager