1、对request和response重新进行封装,目的是打造retrofit一样的网络框架。
对不需要的类加上注解deprecated
2、将类MoocResponse标记为过时
3、将MoocRequest标记为deprecated
4、将MoocApiProvider标记为过时
5、将WrapperResponse标记为deprecated
6、重新封装request和response
7、重新封装Response,是对整个上层重新进行了一次封装
package com.nice.http;
/**
* 上层业务的response
*
* @author nate
*/
public class Response<T> {
/**
* 解析后的实体
*/
private T mBody;
/**
* 原始响应头
*/
private HttpResponse mResponse;
public Response(T body, HttpResponse response) {
this.mResponse = response;
this.mBody = body;
}
/**
* 请求是否成功
*
* @return true 是成功 false 不成功
*/
public boolean isSuccess() {
return mResponse.getStatus().isSuccess();
}
/**
* 得到解析后的实体
*
* @return body
*/
public T body() {
return mBody;
}
}
8、请求成功的回调
package com.nice;
import com.nice.http.Response;
/**
* 请求接口回调
*
* @author nate
*/
public interface Callback<T> {
/**
* 请求成功
*
* @param response {@link Response 响应实体}
*/
void onSuccess(Response<T> response);
/**
* 请求失败
*
* @param exception 请求错误信息
*/
void onFailure(Throwable exception);
}
9、对请求进行封装,它也是面临了一个上层的请求。
请求主要包括请求的url、请求的方法、请求头、请求的二进制数组(请求参数)
为了更简单地创建请求对象,使用build方法进行创建
package com.nice.http;
import com.nice.utils.HttpUrl;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
/**
* 上层的业务请求对象
*
* @author nate
*/
public class Request {
/**
* 请求的url
*/
private String mUrl;
/**
* 请求的方式
*/
private HttpMethod mMethod;
/**
* 请求头
*/
private HttpHeader mHeader;
/**
* 请求的实体
*/
private RequestBody mBody;
/**
* 请求重试次数
*/
private int mRetryCount;
public Request(Builder builder) {
this.mUrl = builder.mUrl;
this.mMethod = builder.mMethod;
this.mHeader = builder.mHeader;
this.mBody = builder.mRequestBody;
this.mRetryCount=builder.mRetryCount;
}
public int getRetryCount() {
return mRetryCount;
}
public RequestBody getBody() {
return mBody;
}
public String getUrl() {
return mUrl;
}
public HttpMethod getMethod() {
return mMethod;
}
public HttpHeader getHeader() {
return mHeader;
}
public static class Builder {
private String mUrl;
private HttpMethod mMethod;
private HttpHeader mHeader;
private Map<String, String> mFormParams = new HashMap<>();
private Map<String, String> mQueryParams = new HashMap<>();
private RequestBody mRequestBody;
private int mRetryCount;
public Builder url(String url) {
this.mUrl = url;
return this;
}
public Builder requestBody(RequestBody body) {
this.mRequestBody = body;
return this;
}
public Builder httpMethod(HttpMethod method) {
this.mMethod = method;
return this;
}
public Builder addFormParam(String key, String value) {
mFormParams.put(key, value);
return this;
}
public Builder addQueryParam(String key, String value) {
mQueryParams.put(key, value);
return this;
}
public Builder addHeader(HttpHeader httpHeader) {
this.mHeader = httpHeader;
return this;
}
public Builder retryCount(int count) {
this.mRetryCount = count;
return this;
}
public Request build() {
try {
if (mQueryParams.size() > 0) {
this.mUrl = HttpUrl.encodedQuery(mUrl, mQueryParams);
}
if (mFormParams.size() != 0) {
mRequestBody = new RequestBody.FormBody(HttpUrl.encodedForm(mFormParams), MediaType.APPLICATION_FORM_URLENCODED_VALUE);
}
} catch (IOException e) {
e.printStackTrace();
throw new RuntimeException("编码解析出错");
}
return new Request(this);
}
}
}
10、上面的代码主要是定义了一些接口,比如说callback和上层所用到的request和response对象。和之前不同的是对request和response进行了重新定义,这样更符合整个框架的调整