admin
2021-07-20 27bd1f81221b8c8e8047118a64c2beb7bc214bbb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
package com.lcjian.library.okhttp.request;
 
import com.lcjian.library.okhttp.OkHttpUtils;
import com.lcjian.library.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();
        }
    }
 
 
}