JSON

Android M(6.x)使用OkHttp包解析和发送JSON请求的教程(2)

字号+ 作者:H5之家 来源:H5之家 2016-11-28 14:00 我要评论( )

import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.JSONException;import com.alibaba.fastjson.JSONObject;import java.lang.reflect.Array;import java.util.Collection;import java.util.HashMap;i

import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONException; import com.alibaba.fastjson.JSONObject; import java.lang.reflect.Array; import java.util.Collection; import java.util.HashMap; import java.util.Map; import static com.alibaba.fastjson.JSON.parseObject; public class ReqJsonUtils { //基本类型映射关系Map private static final Map primitiveWrapperTypeMap = new HashMap(8); static { //添加基本类型 primitiveWrapperTypeMap.put(Boolean.class, boolean.class); primitiveWrapperTypeMap.put(Byte.class, byte.class); primitiveWrapperTypeMap.put(Character.class, char.class); primitiveWrapperTypeMap.put(Double.class, double.class); primitiveWrapperTypeMap.put(Float.class, float.class); primitiveWrapperTypeMap.put(Integer.class, int.class); primitiveWrapperTypeMap.put(Long.class, long.class); primitiveWrapperTypeMap.put(Short.class, short.class); } /** * 将JSON字符串转换成指定的用户返回值类型 * * @param type * @param jsonData * @return * @throws JSONException */ public static <T> T parseHttpResult(TypeInfo type, String jsonData) throws JSONException { // 处理Void类型的返回值 if (Void.class.isAssignableFrom(type.getComponentType())) { return null; } //获取当前type的数据类型 Class<?> rawType = type.getRawType(); //是否是Array boolean isArray = rawType != null && Array.class.isAssignableFrom(rawType); //是否是Collection boolean isCollection = rawType != null && Collection.class.isAssignableFrom(rawType); //是否是Map boolean isMap = rawType != null && Map.class.isAssignableFrom(rawType); //获取泛型类型 Class<?> componentType = type.getComponentType(); //声明结果对象 T result = null; if (isCollection) {//处理collection result = (T) JSON.parseArray(jsonData, componentType); } else if (isArray) {//处理array result = (T) JSON.parseArray(jsonData, componentType).toArray(); } else if (isMap) {//处理Map result = (T) JSONObject.parseObject(jsonData, type.getType()); } else if (componentType.isAssignableFrom(String.class)) {//处理字符串返回值 return (T) jsonData; } else { // 接口的返回类型如果是简单类型,则会封装成为一个json对象,真正的对象存储在value属性上 if (isPrimitiveOrWrapper(componentType)) { result = (T) parseObject(jsonData); } else { //处理自定义对象 result = (T) parseObject(jsonData, componentType); } } return result; } /** * 判断是否是基本数据类型 * * @param clazz * @return */ public static boolean isPrimitiveOrWrapper(Class clazz) { return (clazz.isPrimitive() || isPrimitiveWrapper(clazz)); } /** * 判断是否是基本数据类型 * * @param clazz * @return */ public static boolean isPrimitiveWrapper(Class clazz) { return primitiveWrapperTypeMap.containsKey(clazz); } }

如何使用?
1.实现解析

TypeInfo typeInfo = ReqClassUtils.getCallbackGenericType(callBack.getClass()); callBack.onReqSuccess(ReqJsonUtils.parseHttpResult(typeInfo, jsonData));

2.发送请求

HashMap<String, String> paramsMap = new HashMap<>(); paramsMap.put("sourceType", "2"); paramsMap.put("sourceDesc", "[Android]" + Build.VERSION.RELEASE + "[Mobel]" + Build.BRAND + " " + Build.MODEL + Build.DEVICE); HashMap<String, String> params = dealStringBody(paramsMap); RequestManager.getInstance(this).requestAsyn("xxx/actionUrl", RequestManager.TYPE_POST_JSON, params, new ReqCallBack<String>() { @Override public void onReqSuccess(String result) { request_tv.setText(result); } @Override public void onReqFailed(String errorMsg) { } });

3.支持类型

new ReqCallBack<List<Object>>();//集合collection new ReqCallBack<Map<String, User>>();//map new ReqCallBack<Void>();//Void new ReqCallBack<Long>();//基础类型

 

相关阅读:
常见浏览器兼容性问题与解决方案css篇
win7系统开机提示NVIDIA Geforce Experience Backend停止工作的故障原因及解决方法
Android ListView实现仿iPhone实现左滑删除按钮的简单实例
mac系统中怎么打开rar/zip等压缩文件?
ajax同步异步简单实现
css教程之css设置字体颜色
Win10更新失败提示错误代码0x80240442怎么解决
win7网上邻居为什么无法使用?win7系统网上邻居无法使用的解决方法
Win10系统家庭版升级专业版失败提示无法升级你的Windows的故障原因及解决方法
JS iFrame加载慢怎么解决

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • PHP与JavaScript使用Json实现数据交换

    PHP与JavaScript使用Json实现数据交换

    2016-11-23 15:00

  • 在JavaScript中使用JSON数据

    在JavaScript中使用JSON数据

    2016-11-22 17:01

  • Json解析教程(四.FastJson 的使用)

    Json解析教程(四.FastJson 的使用)

    2016-11-19 14:01

  • android_json教程

    android_json教程

    2016-11-18 17:01

网友点评