package com.zhy.http.okhttp.request; import com.zhy.http.okhttp.OkHttpUtils; import com.zhy.http.okhttp.callback.Callback; import java.io.IOException; import java.util.concurrent.TimeUnit; import okhttp3.Call; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; /** * Created by zhy on 15/12/15. * 对OkHttpRequest的封装,对外提供更多的接口:cancel(),readTimeOut()... */ public class RequestCall { private OkHttpRequest okHttpRequest; private Request request; private Call call; private long readTimeOut; private long writeTimeOut; private long connTimeOut; private OkHttpClient clone; public RequestCall(OkHttpRequest request) { this.okHttpRequest = request; } public RequestCall readTimeOut(long readTimeOut) { this.readTimeOut = readTimeOut; return this; } public RequestCall writeTimeOut(long writeTimeOut) { this.writeTimeOut = writeTimeOut; return this; } public RequestCall connTimeOut(long connTimeOut) { this.connTimeOut = connTimeOut; return this; } public Call buildCall(Callback callback) { request = generateRequest(callback); if (readTimeOut > 0 || writeTimeOut > 0 || connTimeOut > 0) { readTimeOut = readTimeOut > 0 ? readTimeOut : OkHttpUtils.DEFAULT_MILLISECONDS; writeTimeOut = writeTimeOut > 0 ? writeTimeOut : OkHttpUtils.DEFAULT_MILLISECONDS; connTimeOut = connTimeOut > 0 ? connTimeOut : OkHttpUtils.DEFAULT_MILLISECONDS; clone = OkHttpUtils.getInstance().getOkHttpClient().newBuilder() .readTimeout(readTimeOut, TimeUnit.MILLISECONDS) .writeTimeout(writeTimeOut, TimeUnit.MILLISECONDS) .connectTimeout(connTimeOut, TimeUnit.MILLISECONDS) .build(); call = clone.newCall(request); } else { call = OkHttpUtils.getInstance().getOkHttpClient().newCall(request); } return call; } private Request generateRequest(Callback callback) { return okHttpRequest.generateRequest(callback); } public void execute(Callback callback) { buildCall(callback); if (callback != null) { callback.onBefore(request, getOkHttpRequest().getId()); } OkHttpUtils.getInstance().execute(this, callback); } public Call getCall() { return call; } public Request getRequest() { return request; } public OkHttpRequest getOkHttpRequest() { return okHttpRequest; } public Response execute() throws IOException { buildCall(null); return call.execute(); } public void cancel() { if (call != null) { call.cancel(); } } }