一、OKHttp的优势
url测试地址:http://httpbin.org
二、首先对Response进行封装
①定义IResponse接口
public interface IResponse { //状态码 int getCode(); //数据体 String getData(); }②BaseResponse实现继承IResponse
public class BaseResponse implements IResponse { public static final int STATE_UNKNOWN_ERROR = 100001; public static final int STATE_OK = 200; //状态码 private int code; // 响应数据 private String data; @Override public int getCode() { return code; } @Override public String getData() { return data; } public void setCode(int code) { this.code = code; } public void setData(String data) { this.data = data; } }三、对Requset进行封装
①定义IRequset接口
public interface IRequest { public static final String POST = "POST"; public static final String GET = "GET"; /** * 指定请求方式 */ void setMethod(String method); /** * 指定请求头部 */ void setHeader(String key, String value); /** * 指定请求参数 */ void setBody(String key, String value); /** * 提供给执行库请求行URL * * @return */ String getUrl(); /** * 提供给执行库请求头部 * * @return */ Map<String, String> getHeader(); /** * 提供给执行库请求参数 * * @return */ Object getBody(); }②BaseResquest继承IResquest
public class BaseRequest implements IRequest { private String method = POST; private String url; private Map<String, String> header; private Map<String, Object> body; BaseRequest(String url) { this.url = url; header = new HashMap<>(); body = new HashMap<>(); header.put("X-Bmob-Application-Id", ""); header.put("X-Bmob-REST-API-Key", ""); } @Override public void setMethod(String method) { this.method = method; } @Override public void setHeader(String key, String value) { header.put(key, value); } @Override public void setBody(String key, String value) { body.put(key, value); } @Override public String getUrl() { //http://cloud.bmob.cn/f34e28da5816433d/getMsgCode?phone=${phone} if (GET.equals(method)) { for (String key : body.keySet()) { url = url.replace("${" + key + "}", body.get(key).toString()); } } return url; } @Override public Map<String, String> getHeader() { return header; } @Override public Object getBody() { if (body != null) {四、最后封装HttpClientreturn new Gson().toJson(body,HashMap.class);}else { return "{}"; }}
①定义IHttpClient接口
public interface IHttpClient { IResponse get(IRequest request, boolean foreCache); IResponse post(IRequest request, boolean foreCahe); }②OKHttpClientImpl继承IHttpClient
public class OKHttpClientImpl implements IHttpClient { OkHttpClient mOkHttpClient = new OkHttpClient.Builder() .build(); @Override public IResponse get(IRequest request, boolean foreCache) { // 指定请求方式 request.setMethod(IRequest.GET); // 解析头部 Request.Builder builder = new Request.Builder(); Map<String, String> header = request.getHeader(); for (String key : header.keySet()) { // 组装成 OkHttp 的 Header builder.header(key, header.get(key)); } //获取url String url = request.getUrl(); builder.url(url).get(); Request oKRequest = builder.build(); // 执行 oKRequest return execute(oKRequest); } @Override public IResponse post(IRequest request, boolean foreCahe) { // 指定请求方式 request.setMethod(IRequest.POST); Request.Builder builder = new Request.Builder(); MediaType mediaType = MediaType .parse("application/json; charset=utf-8"); RequestBody body = RequestBody.create(mediaType, request.getBody().toString()); Map<String, String> header = request.getHeader(); for(String key:header.keySet()){ builder.header(key,header.get(key)); } builder.url(request.getUrl()).post(body); Request okRequest = builder.build(); return execute(okRequest); } private IResponse execute(Request request) { BaseResponse commonResponse = new BaseResponse(); try { Response response = mOkHttpClient.newCall(request).execute(); // 设置状态码 commonResponse.setCode(response.code()); String body = response.body().string(); // 设置响应数据 commonResponse.setData(body); } catch (IOException e) { e.printStackTrace(); commonResponse.setCode(commonResponse.STATE_UNKNOWN_ERROR); commonResponse.setData(e.getMessage()); } return commonResponse; } }五、测试OKHttp的封装
首先选中OKHttpClientImpl右击选择GO TO->Test->勾选setUp/@Before
public class OKHttpClientImplTest { private IHttpClient httpClient; @Before public void setUp() throws Exception { httpClient = new OKHttpClientImpl(); } @Test public void get() throws Exception { String url = "http://httpbin.org/get?uid=${uid}"; IRequest request = new BaseRequest(url); request.setMethod(IRequest.GET); request.setBody("uid", "123456"); request.setHeader("testheader", "dongge"); IResponse response = httpClient.get(request, false); System.out.println("stateCode = " + response.getCode()); System.out.println("body =" + response.getData()); } @Test public void post() throws Exception { // 设置 request 参数 String url = "http://httpbin.org/post"; IRequest request = new BaseRequest(url); request.setMethod(IRequest.POST); request.setBody("uid", "123456"); request.setHeader("testheader", "dongge2"); IResponse response = httpClient.post(request, false); System.out.println("stateCode = " + response.getCode()); System.out.println("body =" + response.getData()); } }