okhttp对中callBack扩展使onError或onResponse能返回更多响应信息
2018-03-05 17:38
375 查看
app端经常遇到这样的需求:弹出一个Toast显示服务端的提示信息,比如:“用户名已经被注册”。方法一:public abstract class CommonCallback<T> extends Callback {private Type type;public CommonCallback() {Class<? extends CommonCallback> clazz = getClass();Type genericSuperclass = clazz.getGenericSuperclass();if (genericSuperclass instanceof Class) {throw new RuntimeException("没有写泛型");}ParameterizedType parameterizedType = (ParameterizedType) genericSuperclass;type = parameterizedType.getActualTypeArguments()[0];}@Overridepublic void onError(Call call, Exception e, int id) {onError(e);}@Overridepublic void onResponse(String response, int id) {try {JSONObject resp = new JSONObject(response);int resultCode = resp.getInt("resultCode");if (resultCode == 1) {String data = resp.getString("data");onResponse((T) GsonUtil.getGson().fromJson(data, type));} else {onError(new Exception(resp.getString("resultMessage")));}} catch (JSONException e) {e.printStackTrace();}}/*** 返回true使得所有请求,无论response code为多少都当做响应成功,交给onResponse方法处理,* 便于不同错误响应的返回* @param response* @param id* @return*/@Overridepublic boolean validateReponse(Response response, int id) {return true;}@Overridepublic String parseNetworkResponse(Response response, int id) throws IOException {return response.body().string();}public abstract void onError(Exception e);public abstract void onResponse(T response);}此方法通过将validateResponse方法返回值设置为true,使得所有的response(无论response code为多少)都能通过检测,被onResponse接收到,然后在外部逻辑传入回调函数时实现onResponse和onError方法(最后两个抽象方法),可以自由处理所有返回信息。此方法适用于项目自己定义了resultCode和resultMessage的情况,由服务端返回这些信息,然后客户端在onResponse中直接显示。方法二:public abstract class MyStringCallback extends Callback<string> {@Overridepublic boolean validateReponse(Response response, int id) {return true;}@Overridepublic String parseNetworkResponse(Response response, int id) throws Exception {if(response.code()>=200 && response.code()<300){return response.body().string();}else{throw new Exception("code is:"+response.code()+"\n"+response.body().string());}}}此方法仍然进行了响应的过滤(虽然validateResponse返回true,但是在之后的parseNetworkResponse方法中进行了筛选)——response code在200到300之间的响应被onResponse接收,其余响应被onError接收。唯一增添的灵活性就是可以自己添加Error的错误信息(见代码段else中)。
相关文章推荐
- cas 3.5.2 登录成功后,如何返回用户更多信息?
- 【cas】利用Map返回更多信息
- 服务器端用Servlet响应客户端请求,Gson请求。可以返回多个数据库中的信息
- 使用volley时 onErrorResponse错误,如何查看详细的信息
- okhttp post返回的response无法转换成json
- 使用Volley框架,不走onResponse和onError方法
- php关于接收post过来的xml信息以及给出响应(response)
- sso返回更多用户信息,中文乱码
- CAS 实现单点登录(SSO)返回更多用户信息(五)
- Spring MVC @ResponseBody注解返回响应流时中文乱码问题的解决
- CAS—登录后返回更多用户信息
- cas登录成功返回用户更多信息
- cas 4.2.5 返回更多的用户信息
- request和response操作响应行头体信息
- Spring MVC @ResponseBody注解返回响应流时中文乱码问题的解决
- cas 服务器端能返回更多的信息
- nginx中隐藏响应头/返回头信息/php版本号/服务器信息
- yale cas 3.4如何返回更多信息高级篇
- 设置通过response返回的信息设置客户端的输出编码
- AjaxOptions.OnSuccess回调方法返回的参数信息