forked from liujingxing/rxhttp
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathHttpSender.java
More file actions
210 lines (189 loc) · 7.17 KB
/
HttpSender.java
File metadata and controls
210 lines (189 loc) · 7.17 KB
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
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
package rxhttp;
import java.io.IOException;
import io.reactivex.Observable;
import io.reactivex.annotations.NonNull;
import io.reactivex.functions.Function;
import io.reactivex.schedulers.Schedulers;
import okhttp3.OkHttpClient;
import okhttp3.Response;
import rxhttp.wrapper.callback.ProgressCallback;
import rxhttp.wrapper.entity.Progress;
import rxhttp.wrapper.param.Param;
import rxhttp.wrapper.param.PostFormParam;
import rxhttp.wrapper.parse.DownloadParser;
import rxhttp.wrapper.parse.Parser;
import rxhttp.wrapper.parse.SimpleParser;
/**
* 有公共参数的请求,用此类
* User: ljx
* Date: 2017/12/2
* Time: 11:13
*/
public class HttpSender {
public static void init(OkHttpClient okHttpClient) {
init(okHttpClient, false);
}
public static void init(OkHttpClient okHttpClient, boolean debug) {
Sender.setDebug(debug);
Sender.init(okHttpClient);
}
public static OkHttpClient getOkHttpClient() {
return Sender.getOkHttpClient();
}
public static void setDebug(boolean debug) {
Sender.setDebug(debug);
}
public static void setOnParamAssembly(Function<Param, Param> onParamAssembly) {
Sender.setOnParamAssembly(onParamAssembly);
}
/**
* 同步发送一个请求
* <p>支持任意请求方式,如:Get、Head、Post、Put等
*
* @param param 请求参数
* @return Response
* @throws IOException 数据解析异常、网络异常等
*/
public static Response execute(@NonNull Param param) throws IOException {
return Sender.execute(param);
}
/**
* 同步发送一个请求
* <p>支持任意请求方式,如:Get、Head、Post、Put等
* <p>亦支持文件上传/下载(无进度回调)
* {@link DownloadParser} 文件下载(无进度回调)
* {@link PostFormParam} 文件上传(无进度回调)
*
* @param param 请求参数
* @param parser 数据解析器
* @param <T> 要转换的目标数据类型
* @return T
* @throws IOException 数据解析异常、网络异常等
*/
public static <T> T execute(@NonNull Param param, @NonNull Parser<T> parser) throws IOException {
return parser.onParse(execute(param));
}
/**
* <P>异步发送一个请求,在{@link Schedulers#io()} 执行
* <P>仅支持Get请求
* <P>不支持文件上传/下载
*
* @param url 目标url
* @return Observable<String>
*/
public static Observable<String> fromGet(@NonNull String url) {
return from(Param.get(url));
}
/**
* <P>异步发送一个请求,在{@link Schedulers#io()} 执行
* <p>支持任意请求方式,如:Get、Head、Post、Put等
* <P>不支持文件上传/下载
*
* @param param 请求参数
* @return Observable<String>
*/
public static Observable<String> from(@NonNull Param param) {
return from(param, SimpleParser.get(String.class));
}
/**
* <P>异步发送一个请求,在{@link Schedulers#io()} 执行
* <P>仅支持Get请求及文件下载(无进度回调)
* {@link DownloadParser} 文件下载(无进度回调)
*
* @param url 目标url
* @param parser 数据解析器
* @param <T> 要转换的目标数据类型
* @return Observable<T>
* @see #download(Param, String) 下载带进度回调
*/
public static <T> Observable<T> fromGet(@NonNull String url, @NonNull Parser<T> parser) {
return from(Param.get(url), parser);
}
/**
* <P>异步发送一个请求,在{@link Schedulers#io()} 执行
* <p>支持任意请求方式,如:Get、Head、Post、Put等
* <p>亦支持文件上传/下载(无进度回调)
* {@link DownloadParser} 文件下载(无进度回调)
* {@link PostFormParam} 文件上传(无进度回调)
*
* @param param 请求参数
* @param parser 数据解析器
* @param <T> 要转换的目标数据类型
* @return Observable<T>
* @see #downloadProgress(Param, String) 下载带进度回调
* @see #uploadProgress(Param, Parser) 上传带进度回调
*/
public static <T> Observable<T> from(@NonNull Param param, @NonNull Parser<T> parser) {
return syncFrom(param, parser).subscribeOn(Schedulers.io());
}
/**
* <P>同步发送一个请求
* <p>支持任意请求方式,如:Get、Head、Post、Put等
* <p>亦支持文件上传/下载(无进度回调)
* {@link DownloadParser} 文件下载(无进度回调)
* {@link PostFormParam} 文件上传(无进度回调)
*
* @param param 请求参数
* @param parser 数据解析器
* @param <T> 要转换的目标数据类型
* @return Observable<T>
* @see #downloadProgress(Param, String) 下载带进度回调
* @see #uploadProgress(Param, Parser) 上传带进度回调
*/
public static <T> Observable<T> syncFrom(@NonNull Param param, @NonNull Parser<T> parser) {
return new ObservableHttp<>(param, parser);
}
/**
* 异步文件下载,不带进度
*
* @param param 请求参数
* @param destPath 目标路径
* @return Observable<Progress>
*/
public static Observable<String> download(@NonNull Param param, final String destPath) {
return from(param, new DownloadParser(destPath));
}
/**
* 异步文件下载,带进度回调
*
* @param param 请求参数
* @param destPath 目标路径
* @return Observable<Progress>
*/
public static Observable<Progress<String>> downloadProgress(@NonNull Param param, final String destPath) {
return downloadProgress(param, destPath, 0);
}
/**
* 异步文件下载,带进度回调
*
* @param param 请求参数
* @param destPath 目标路径
* @param offsetSize 断点下载时,进度偏移量,仅断点下载时有效
* @return Observable<Progress>
*/
public static Observable<Progress<String>> downloadProgress(@NonNull Param param, final String destPath, long offsetSize) {
return new ObservableDownload(param, destPath, offsetSize).subscribeOn(Schedulers.io());
}
/**
* 异步发送一个请求,信息上传(支持文件上传,带进度回调)
* 支持实现了{@link Param}接口的请求
*
* @param param 请求参数,必须要重写{@link Param#setProgressCallback(ProgressCallback)}方法
* @return Observable<Progress < String>>
*/
public static Observable<Progress<String>> uploadProgress(@NonNull Param param) {
return uploadProgress(param, SimpleParser.get(String.class));
}
/**
* 异步发送一个请求,信息上传(支持文件上传,带进度回调)
* 支持实现了{@link Param}接口的请求
*
* @param param 请求参数,必须要重写{@link Param#setProgressCallback(ProgressCallback)}方法
* @param parser 数据解析器
* @param <T> 要转换的目标数据类型
* @return Observable<Progress>
*/
public static <T> Observable<Progress<T>> uploadProgress(@NonNull Param param, @NonNull Parser<T> parser) {
return new ObservableUpload<>(param, parser).subscribeOn(Schedulers.io());
}
}