package com.makeunion.mvvmrxjavaretrofit.http;
import com.google.gson.Gson;
import com.makeunion.mvvmrxjavaretrofit.BuildConfig;
import com.makeunion.mvvmrxjavaretrofit.Logger.Logger;
import com.makeunion.mvvmrxjavaretrofit.util.UrlsFiled;
import java.io.EOFException;
import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.charset.UnsupportedCharsetException;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import okhttp3.Connection;
import okhttp3.Headers;
import okhttp3.Interceptor;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Protocol;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
import okhttp3.ResponseBody;
import okhttp3.logging.HttpLoggingInterceptor;
import okio.Buffer;
import okio.BufferedSource;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;
/**
* 类说明
*
* @author fengwl
* @version [版本]
* @see [相关类]
* @since [模块]
*/
public class RetrofitManager {
private static final int DEFAULT_TIME_OUT = 10;
private Map<String, String> headers = new HashMap<>();
private OkHttpClient.Builder clientBuilder;
private OkHttpClient mDefaultClient;
private OkHttpClient mFixTimeOutClient;
private final Retrofit.Builder retrofitBuilder;
//Gson 的单例
private final Gson mGson = new Gson();
public static class SingletonHolder {
private static final RetrofitManager INSTANCE = new RetrofitManager();
}
private RetrofitManager() {
clientBuilder = new OkHttpClient.Builder();
clientBuilder.connectTimeout(DEFAULT_TIME_OUT, TimeUnit.SECONDS);
retrofitBuilder = new Retrofit.Builder();
syncRequestHeader();
initLog();
}
public Gson getGson() {
return mGson;
}
public static RetrofitManager getInstance() {
return SingletonHolder.INSTANCE;
}
/**
* 获取默认的Retrofit对象,10s默认的连接超时时间,访问管家服务器接口地址
*
* @return m默认的Retrofit对象
*/
public Retrofit getDefaultRetrofit() {
if (mDefaultClient == null) {
clientBuilder.connectTimeout(DEFAULT_TIME_OUT, TimeUnit.SECONDS);
mDefaultClient = clientBuilder.build();
}
return retrofitBuilder.baseUrl(UrlsFiled.SERVICE_URL)
.client(mDefaultClient)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.build();
}
/**
* 获取特定超时时间的Retrofit 访问的URL为管家后台服务器地址
*
* @param timeout 自定义的超时时间
* @return Retrofit对象
*/
public Retrofit getFixedTimeoutRetrofit(int timeout) {
if (mFixTimeOutClient == null) {
clientBuilder.connectTimeout(timeout, TimeUnit.SECONDS);
mFixTimeOutClient = clientBuilder.build();
}
return retrofitBuilder.baseUrl(UrlsFiled.SERVICE_URL)
.client(mFixTimeOutClient)
.addConverterFactory(GsonConverterFactory.create())
.build();
}
/**
* 获取特定URL的Retrofit 超时时间默认为10s
*
* @param baseUrl 指定的URL
* @return Retrofit对象
*/
public Retrofit getSpecialUrlRetrofit(String baseUrl) {
if (mDefaultClient == null) {
clientBuilder.connectTimeout(DEFAULT_TIME_OUT, TimeUnit.SECONDS);
mDefaultClient = clientBuilder.build();
}
return retrofitBuilder.baseUrl(baseUrl)
.client(mDefaultClient)
.addConverterFactory(GsonConverterFactory.create())
.build();
}
/**
* 添加请求头
*
* @param key 添加请求头的key
* @param value 添加请求头的value
*/
public void addHeader(String key, String value) {
if (key == null) return;
headers.put(key, value);
}
/**
* 设置请求头
*
* @param headers 请求头的map
*/
public void setHeaders(Map<String, String> headers) {
this.headers = headers;
}
/**
* 移除某个请求头
*
* @param key 请求头的key值
*/
public void removeHeader(String key) {
if (key == null) return;
if (headers.containsKey(key)) {
headers.remove(key);
}
}
private void syncRequestHeader() {
if (clientBuilder == null) {
clientBuilder = new OkHttpClient.Builder();
}
clientBuilder.addInterceptor(new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
Request.Builder builder = request.newBuilder();
builder.headers(Headers.of(headers));
request = builder.build();
return chain.proceed(request);
}
});
}
public Map<String, String> createHeaders() {
headers.put(UrlsFiled.FLAG_HEADER_MPTSP, String.valueOf(System.currentTimeMillis()));
return headers;
}
public OkHttpClient getOkHttpClient() {
if (mDefaultClient == null) {
clientBuilder.connectTimeout(DEFAULT_TIME_OUT, TimeUnit.SECONDS);
mDefaultClient = clientBuilder.build();
}
return mDefaultClient;
}
private void initLog() {
if (BuildConfig.DEBUG) {
HttpLoggingInterceptor logIntercepto = new HttpLoggingInterceptor(new HttpLog());
logIntercepto.setLevel(HttpLoggingInterceptor.Level.BODY);
clientBuilder.addInterceptor(logIntercepto);
}
}
private class HttpLog implements HttpLoggingInterceptor.Logger{
@Override
public void log(String message) {
Logger.d(message);
}
}
private class LogIntercept implements Interceptor {
private final Charset UTF8 = Charset.forName("UTF-8");
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
RequestBody requestBody = request.body();
boolean hasRequestBody = requestBody != null;
Connection connection = chain.connection();
Protocol protocol = connection != null ? connection.protocol() : Protocol.HTTP_1_1;
Logger.d("start request" +
"\nrequest method = [" + request.method() + "]" +
"\nrequest url = [" + request.url() + "]" +
"\nrequest protocol = [" + protocol + "]" +
"\nrequest.body = ["+ request.toString() +"]");
if (hasRequestBody) {
if (requestBody.contentType() != null) {
Logger.d("request content type = [" + requestBody.contentType() + "]");
}
}
Headers headers = request.headers();
StringBuilder sBuilder = new StringBuilder("Headers:\n");
for (int i = 0, count = headers.size(); i < count; i++) {
String name = headers.name(i);
// Skip headers from the request body as they are explicitly logged above.
if (!"Content-Type".equalsIgnoreCase(name) && !"Content-Length".equalsIgnoreCase(
name)) {
sBuilder.append(name);
sBuilder.append(" : ");
sBuilder.append(headers.value(i));
sBuilder.append("\n");
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
MvvmRxJavaRetrofit (373个子文件)
004fb26ebf3b5a6444c99c0dae402a1a28905f 188B
01886d8ea88f65eb795442657bd5ebbf9779d6 536B
036ab1ee1b4c888e210cfd41c8b08ec3197c62 365B
043e0eb630f875bc943a411d0fa1b80772bdbe 108KB
053ea730441e7c724dafdee2f870a97e0644ae 182B
0939cdff4d05ac3a1c1144441d609b91a9b916 571B
0a73bdd64174f56f74046cb982d8ce130067b1 899B
0acd8d67a8085b581d174419bee83a03beb4ed 122B
0b282aa6885fb573c106b3551f7275c5f17e8e 1005B
0d89e02b76273234ddeff6d194601a15bcf9e4 573B
104fb600037f34588e1555acc87650437362a3 248B
11131edcd3dbe4e046fe311bb8bf00a5c03642 737B
129934bca4cd1b0df69967135f41f7af2f55d3 934B
14ca1fd14312a66d5c3e0b85d7f456252c0877 540B
15814e598787d740f56e265da6a16034f545ba 807B
16763e4d4174c92309b97d52ef48d1947898be 152KB
16a6a99bf58dc84445ee94b48c039344d8c775 183B
187aa9be64a4b8bcacc86498fb102fd6db01a1 45B
1889e36521eb11ccbfbd5b95f8c54572405aad 102KB
1936b5af786fb9ce01b954f9ef25f1cb0a7323 296B
194508b29358946823aab4897cf3f41f7497eb 162B
19b410a1b15ff180f3dacac19395fe3046cdec 10KB
1ae982d3c08f2945e7161a6b4b2067ac6c957c 334B
1ef3f0d521d50757069c492baaeae1b6491592 344B
204017d565407efdd877dbf3dc9060078646f3 911B
2243fd3436fecf4a523220c4eb3b5ba30af479 743B
22701bb12f701195a427a29d4afd3a9165728a 297B
2468bb4a4ba2d9adcfb39bfced195ddaf6d0f5 233B
24c9f8cf6fa59987f7ca70037e605d8f6e3512 534B
26016f5d08ce0a67b97aba2103022d06a99a61 3KB
2758d7050c98b07c02bb9364a0b4274d3ec2f7 45B
2811cd281b6ed54b403acd06b247e78c25fa35 96B
294364e8010fb31262e57a5ea6d2c3cea7ce94 105KB
2a25b59bde5566f6127f73dd3c171934de9997 61B
2bf862c40c418ef09fe0209b140400d520707b 755B
2ce5c79f126d03e5c71f9e8525917138b6039e 47B
30f78e23d8f04978709c2a3f423c293338629b 370B
317da869a10bf4749971e312aa762e97a3ba4f 158KB
35bd8634e0c5e80e22aab632ec0f44394862bf 716B
363d0cfa7fce2545840a8d0a28aee64730887c 899B
365afa238d8bd3e713abbc8a9a9db55473697f 131KB
372aef5e24af05341d49695ee84e5f9b594659 47KB
3826e3814559c33861e0241e688f031545f6fd 60B
39fa7f741505a03ac7e3ea651c333a5eb3d59d 523B
3bb17c1dc6d95c1f09dbb9be42e6802fbce78a 132KB
3f254d01b697382aef3bffcf821ca29884647d 349B
40a155f78a9d4b40797a9f8ea1c69f63a7e430 164B
44ce965065e65689344f81a94cab8dcdffd776 51B
46c9bb939042d09fe59fb3839143d47d2ec729 237B
46f55976c84c8530f67c3708082898e34e2d70 313B
4c6fe3276084d241da30196a8bfe8dfcf3c8fc 46B
4ca3b54d5cd325f83f0741292beea041d9424a 701B
4f04db40ee553ae1a5c9abe5fcecb2f99bd3ca 393B
4f39afd66dda2e1aaf2c8c9cb7d86af247c9bc 131B
4f7adf2f4b034378049740bdb1edc2c6764af1 520B
5047b30a8800354ed863169d9a1acc8322df01 338B
508e52426483adb4a5cfd6e0ce395842e1aba0 46B
50ad812fbd2b8333bfd8a3407e235e3dc73a02 183B
5273f7cbba3625d7d62a31bfedc08edd738a3a 163B
53264e934fa23cd56a95d963db3b8d2cf8eaa5 443B
53ce05bcb8f9d01f613bc934aa3ce74ee8032a 209KB
55909cc7e817b9ed3a74db738a362d5c4d297d 547B
57098b78cd97f4fe2e65e0c4de0d64154c3d17 158KB
57b359223a5aed4ddf99593c060b4e4c58e530 222B
57ded8cb82f3855c788b2b1a9bb91558c82748 625B
57ff10b7e06b5dfe2aa27044bf999c8ef59619 316B
585c64727a549845408cd62a470440fb9e3aa3 116KB
5a9175ee38ba28b1b54f9002eb681144b94739 127KB
5bc5391b968dc091f29a42ec5d403ba70205ec 544B
5c8cff51dd95dcb752610130761d018af2c1a8 129B
5cf778c6b9cff8049962b85c32cd95d1229295 126B
5d1d89a148599065a565ad4571f79a7c20e5a8 578B
604ef20aa967b54c259d45fbbf2197c991c128 131B
61425daea24e82e813dd228d4d7f32c7a2fd52 1KB
62f6f7227ecca84e63929732d49c2adc7d9528 613B
632bf6bcf44fdd9e24e65ee680283cb3954002 232B
6487b4f94c35375e016083d6ca0236d93b9b27 632B
64d734dd6468fac1e4b9eae38557b1b8e5331a 726B
658b7fa0d508b904528e70d792b1c0e812fae8 880B
65c2128846860fb8da0ba5554cca01c8cd148f 113B
678d29e86627efaf2fd7f89e35942f76de5ca0 455B
6a54be9e7bad5742a024dd3b698c4a07ef1776 51B
6b96d1c402326528b4ba3c12ee9d92d0e212e9 22B
6bc9d04cbfcf516c484caf8da368338151dbfa 356B
6c0feb93bf523f6faace999ff5831de1aa26d5 165B
6d5fc655e541b32b98788e46afc738996437a7 450B
6edcae690c577b5a5e8a8cd271831b699d5419 131B
70b8afd225bd87850d6fa73e4c425783e947ef 715B
7227ef8734c4892cd390ddbfdefdd9fbacdcb2 271B
72362b462b35e683282c233d0023d44bbda884 71B
729c3c7382feb2e42fe077ef0bc20aea516b02 412B
755c51ee644358c78ffc8347e2e44ddabc4b17 372B
7909f633da6887ff7cd47e62b00691714354a9 491B
7a0f5ea71635392a3ead60df1c630398088ef0 111B
7ac8ca9c8894171468a880c07f2e8feb2743d6 56B
7ba2a06266618f0dbea4c72d93bc780f044ee9 698B
7c233320a7469c800d405740b0eee35906649a 126B
7d518e7658af2da49a356536b40284ae4c6580 271B
7f4fd6b1b6dac4266cabbedc56e5a108af1c47 173B
7fdc827f455d57aefc60587591b6d2a7a62497 132KB
共 373 条
- 1
- 2
- 3
- 4
Maybe_ren
- 粉丝: 63
- 资源: 5
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
前往页