对于Android开发来说,基本都是用异步来从网络上请求数据,很少用到同步请求的。近日项目有个地方需要使用到同步请求(以我目前的知识储备来说好像只能用同步请求来解决这个问题了),去网上搜索相关资料,又没有找到什么明确的使用方法。所以记下来,以备不时之需。
首先bean类里进行相关,注解:
/** * 群成员信息类 * Created time on 2016/6/28. */@HttpResponse(parser = JsonResponseParser.class)public class GroupMemberInfo implements Serializable{ /** * code : 0000 * data : {"departmentLevel":{},"dispatcherLevel":{"chinese":"超级管理员","key":"SUPER_ADMI_he */ private String code; /** * headImg : * imid : 6HAYAkUeqehe/UtSewyg5tocsw68x8RAJ4SatSeYit7H6eY7dubtz9RpJijbHPibrpdxLw= * mobile : * name : 腾讯超级管理员 * uuid : */ private DataBean data; private String msg; public String getCode() { return code; } public void setCode(String code) { this.code = code; } public DataBean getData() { return data; } public void setData(DataBean data) { this.data = data; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } @Table(name="group_member") public static class DataBean implements Serializable { private DepartmentLevelBean departmentLevel; /** * chinese : 超级管理员 * key : SUPER_ADMIN */ @Column(name ="uuid", isId =true) private String uuid; @Column(name ="headImg") private String headImg; @Column(name ="imid") private String imid; @Column(name ="mobile") private String mobile; @Column(name ="name") private String name; public String getHeadImg() { return headImg; } public void setHeadImg(String headImg) { this.headImg = headImg; } public String getImid() { return imid; } public void setImid(String imid) { this.imid = imid; } public String getMobile() { return mobile; } public void setMobile(String mobile) { this.mobile = mobile; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getUuid() { return uuid; } public void setUuid(String uuid) { this.uuid = uuid; } } }
然后写出解析器的解析方式,我这里采用的是fastjson,真是感觉很好用。
/** * Created by jin * Created time on 2016/7/4. */public class JsonResponseParser implements ResponseParser {// 如果实现 InputStreamResponseParser, 可实现自定义流数据转换. @Override public void checkResponse(UriRequest request) throws Throwable { // custom check ? // get headers ? } /** * 转换result为resultType类型的对象 * * @param resultType 返回值类型(可能带有泛型信息) * @param resultClass 返回值类型 * @param result 字符串数据 * @return * @throws Throwable */ @Override public Object parse(Type resultType, Class<?> resultClass, String result) throws Throwable { // TODO: json to java bean if (resultClass == List.class) { // fastJson 解析: return JSON.parseArray(result, (Class<?>) ParameterizedTypeUtil.getParameterizedType(resultType, List.class, 0)); } else { // fastjson 解析: return JSON.parseObject(result, resultClass); } } }
准备工作已经完成,最后就是直接使用了,用起来还是很简单的。
try { RequestParams params = new RequestParams(UrlConstants.findUserInfoByUuid); params.addBodyParameter("accessToken", User.getAccessToken()); params.addBodyParameter("uid", User.getUid()); //这里就是使用同步请求的地方了,只有一句代码,可以直接返回一个对象。 GroupMemberInfo groupMemberInfo = x.http().postSync(params, GroupMemberInfo.class);} catch (Throwable throwable) { throwable.printStackTrace();}