package com.cheng.networkframestudy.okhttp.frame.request; import com.cheng.networkframestudy.okhttp.frame.callback.Callback; import com.cheng.networkframestudy.okhttp.frame.util.ExceptionUtil; import java.util.Map; import okhttp3.Headers; import okhttp3.Request; import okhttp3.RequestBody; /** * 李旺成 * 2016年2月20日08:19:20 */ public abstract class OkHttpRequest { protected String mUrl; protected Object mTag; protected Map<String, String> mParamMap; protected Map<String, String> mHeaderMap; protected Request.Builder mBuilder = new Request.Builder(); protected OkHttpRequest(String url, Object tag, Map<String, String> params, Map<String, String> headers) { this.mUrl = url; this.mTag = tag; this.mParamMap = params; this.mHeaderMap = headers; if (url == null) { ExceptionUtil.illegalArgument("mUrl can not be null."); } } protected abstract RequestBody buildRequestBody(); protected RequestBody wrapRequestBody(RequestBody requestBody, final Callback callback) { return requestBody; } protected abstract Request buildRequest(Request.Builder builder, RequestBody requestBody); public RequestCall build() { return new RequestCall(this); } public Request generateRequest(Callback callback) { RequestBody requestBody = wrapRequestBody(buildRequestBody(), callback); prepareBuilder(); return buildRequest(mBuilder, requestBody); } private void prepareBuilder() { mBuilder.url(mUrl).tag(mTag); appendHeaders(); } protected void appendHeaders() { Headers.Builder headerBuilder = new Headers.Builder(); if (mHeaderMap == null || mHeaderMap.isEmpty()) return; for (String key : mHeaderMap.keySet()) { String value = mHeaderMap.get(key); if (value == null) continue; headerBuilder.add(key, value); } mBuilder.headers(headerBuilder.build()); } @Override public String toString() { return "OkHttpRequest{" + "mUrl='" + mUrl + '\'' + ", mTag=" + mTag + ", mParamMap=" + mParamMap + ", mHeaderMap=" + mHeaderMap + '}'; } }