封装http请求返回统一json格式数据的网络操作
来源:互联网 发布:25端口是什么 编辑:程序博客网 时间:2024/05/16 16:38
在开发android app时候,总会需要封装一些网络操作。
比如:如果服务器返回的是一个json格式数据,格式满足:{“ErrorCode”:XX, “ErrorMessage”:XXX,”Data”:XXXX}。其中XX是int类型数据,XXX是string类型数据,XXXX是一个满足json格式的字符串。
对于这样的需求,按照下面的思路来封装http请求是个不错的思路。
首先定义一个请求结果的封装类。
public class HttpResponse<T> { public static final int RESPONSE_UNDEFINED = -1; public static final int RESPONSE_OK = 0; public int mErrorCode; public String mErrorMessage; public T mData; public HttpResponse() { mErrorCode = RESPONSE_UNDEFINED; mErrorMessage = null; mData = null; } public HttpResponse(int errorCode, Exception exception, String errorMessage) { mErrorCode = errorCode; mErrorMessage = errorMessage; mData = null; } public HttpResponse(T data) { mErrorCode = RESPONSE_OK; mErrorMessage = null; mData = data; } public boolean isSuccess() { return RESPONSE_OK == mErrorCode; }}
然后定义处理http返回的json格式数据。
public class HttpJsonParser { public static <T> HttpResponse<T> httpGetV1(final String url, final List<NameValuePair> params, final JSONParser<T> parser) { HttpRequest request = new HttpRequest() { @Override public String request() throws IOException { // 具体的Get网络操作 return HttpHelper.doGet(context, url, params); } }; return httpRequest(request, parser); } public static <T> HttpResponse<T> httpPostV1(final String url, final List<NameValuePair> params, final JSONParser<T> parser) { HttpRequest request = new HttpRequest() { @Override public String request() throws IOException { // 具体的Post网络操作 return HttpHelper.doPost(context, url, params); } }; return httpRequest(request, parser); } private static <T> HttpResponse<T> httpRequest(HttpRequest request, JSONParser<T> parser) { HttpResponse<T> response = new HttpResponse<T>(); try { String result = request.request(); parseResult(result, response, parser); } catch (IOException e) { MyLog.e(e); response.mErrorCode = -1; } catch (JSONException e) { MyLog.e(e); // json 错误一般是解析出错了,标记成错误 response.mErrorCode = -2; } catch (NullPointerException e) { MyLog.e(e); response.mErrorCode = -3; } return response; } public static <T> void parseResult(String result, HttpResponse<T> response, JSONParser<T> parser) throws JSONException { if (!TextUtils.isEmpty(result)) { JSONObject json = new JSONObject(result); response.mErrorCode = json.getInt("ErrorCode"); response.mErrorMessage = json.optString("ErrorMessage"); if (!TextUtils.isEmpty(json.optString("Data")) && parser != null) { response.mData = parser.parse(json.optString("Data")); } if (!response.isSuccess()) { MyLog.v("Http request fail. " + result); } } } public static interface HttpRequest { public String request() throws IOException; } public static interface JSONParser<T> { /** * @param response * 此部分是api中需要解析的部分。 * @return */ public T parse(String response) throws JSONException; }}
最后定义跟业务相关的的http接口。
public class HttpApi { public static HttpResponse<Object> http1() { List<NameValuePair> params = new ArrayList<NameValuePair>(); // 添加相应的request param到list中 //..... return HttpJsonParser.httpPostV1("http url1", params, null); } public static HttpResponse<String> http2() { List<NameValuePair> params = new ArrayList<NameValuePair>(); // 添加相应的request param到list中 //..... HttpJsonParser.JSONParser<String> parser = new HttpJsonParser.JSONParser<String>() { @Override public String parse(String response) throws JSONException { // 解析Data对应的json数据 return null; } }; return HttpJsonParser.httpGetV1("http url2", params, parser); } public static HttpResponse<ArrayList<String>> http3() { List<NameValuePair> params = new ArrayList<NameValuePair>(); // 添加相应的request param到list中 //..... HttpJsonParser.JSONParser<ArrayList<String>> parser = new HttpJsonParser.JSONParser<ArrayList<String>>() { @Override public ArrayList<String> parse(String response) throws JSONException { // 解析Data对应的json数据 return null; } }; return HttpJsonParser.httpGetV1("http url3", params, parser); }}
0 0
- 封装http请求返回统一json格式数据的网络操作
- jquery请求返回json格式的数据
- SpringMVC返回json数据的日期格式统一转换
- springmvc返回统一格式json数据
- 封装Spring MVC 返回JSON 格式数据
- ajax请求返回的Json格式数据循环输出
- ace treeview 的动态请求json数据返回格式
- 请求第三方接口返回json格式数据的解析
- Json格式的http请求
- 处理HTTP请求并返回JSON数据的类
- php 请求返回json格式数据
- http请求返回并解析json数据
- http请求返回并解析json数据
- HTTP协议post请求返回json数据
- ios网络学习------5 json格式数据的请求处理
- ios网络学习------6 json格式数据的请求处理
- 请求网络数据返回json串
- RxJava Retrofit2 网络请求,返回数据格式统一的数据报文处理方法
- 南阳oj NYoj 寻找最大数(三) 题目1057
- PAT 1001. A+B Format(水题)
- Masonry介绍与使用实践:快速上手Autolayout
- linux文件压缩与解压
- 挑剔的小杜
- 封装http请求返回统一json格式数据的网络操作
- hdu 5289 Assignment
- sscanf函数用法详解
- wait/notifyAll实现生产者消费者模型仿真
- poj2421
- poj 2762 Going from u to v or from v to u?
- 微信投票刷票的方法
- 利用WIFI(不用数据线)连接Android手机进行调试
- Snail—UI学习之UIImage及UIImageView