/
RetrofitManager.java
71 lines (60 loc) · 2.2 KB
/
RetrofitManager.java
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
package com.ys.yoosir.zzshow.utils.httputil;
import android.util.SparseArray;
import com.ys.yoosir.zzshow.common.ApiConstants;
import com.ys.yoosir.zzshow.common.HostType;
import okhttp3.OkHttpClient;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;
/**
* Retrofit Manager
* Created by Yoosir on 2016/10/24 0024.
*/
public class RetrofitManager {
private Retrofit mRetrofit;
/**
* 类似 Synchronized
* http://www.ibm.com/developerworks/cn/java/j-jtp06197.html
*/
private static volatile OkHttpClient mOkHttpClient;
/**
* SparseArray VS HashMap
*/
private static SparseArray<RetrofitManager> retrofitManagers = new SparseArray<>();
public static RetrofitManager getInstance(int hostType){
RetrofitManager retrofitManager = retrofitManagers.get(hostType);
if(retrofitManager == null){
retrofitManager = new RetrofitManager(hostType);
retrofitManagers.put(hostType,retrofitManager);
return retrofitManager;
}
return retrofitManager;
}
private RetrofitManager(@HostType.HostTypeChecker int hostType){
mRetrofit = new Retrofit.Builder()
.client(getOkHttpClient())
.baseUrl(ApiConstants.getHost(hostType))
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.build();
}
private OkHttpClient getOkHttpClient(){
if(mOkHttpClient == null){
synchronized (RetrofitManager.class){
if(mOkHttpClient == null){
mOkHttpClient = OkHttpUtil.getInstance().getOkHttpClient();
}
}
}
return mOkHttpClient;
}
/**
* Create an implementation of the API endpoints defined by the {@code service} interface.
* @param service 服务接口
* @return T
*/
@SuppressWarnings("unchecked") // Single-interface proxy creation guarded by parameter safety.
public <T> T createService(final Class<T> service){
return mRetrofit.create(service);
}
}