Retrofit最近是非常的火器予,相信大家都已經(jīng)在非常麻溜的使用了,還沒(méi)接觸過(guò)的同學(xué)建議先移步retrofit官網(wǎng)撬讽。
首先我們來(lái)看一下Retrofit的國(guó)際通用用法:
public class RetrofitSimple {
private static DataServiceInterface serviceInterface;
static {
Retrofit.Builder retrofitBuilder = new Retrofit.Builder().baseUrl("https://api.xxxxx.com/")
.addConverterFactory(GsonConverterFactory.create());
serviceInterface = retrofitBuilder.build().create(DataServiceInterface.class);
}
public static DataServiceInterface getService() {
return serviceInterface;
}
}
這里每個(gè)retrofit.create方法只放回DataServiceInterface對(duì)象,在大型項(xiàng)目中會(huì)有多個(gè)模塊的存在窝稿,而每個(gè)模塊都會(huì)有網(wǎng)絡(luò)請(qǐng)求野揪,這就會(huì)導(dǎo)致出現(xiàn)多個(gè)上述代碼访忿,不符合編程之美。
private static <T> T initService(String baseUrl, Class<T> clazz) {
OkHttpClient.Builder builder = new OkHttpClient().newBuilder();
OkHttpClient client = builder.build();
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(baseUrl)
.addConverterFactory(FastJsonConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.client(client)
.build();
return retrofit.create(clazz);
}
上述代碼即可根據(jù)傳入的Service代碼動(dòng)態(tài)生成對(duì)應(yīng)的網(wǎng)絡(luò)請(qǐng)求管理類斯稳。這樣我們就可以根據(jù)業(yè)務(wù)邏輯創(chuàng)建多個(gè)Service海铆。當(dāng)然我們可以提供一個(gè)公共的service管理類,方便各個(gè)模塊調(diào)用挣惰。
完整代碼如下:
public final class ApiClient {
public static String baseUrl = "https://api.xxxxx.com/";
public static AppService appService;
public static ModuleAService moduleAService;
public static ModuleBService moduleBService;
public static ApiConfiguration configuration;
public static void init(ApiConfiguration configuration){
ApiClient.configuration = configuration;
appService = initService(baseUrl, AppService.class);
moduleAService = initService(baseUrl, ModuleAService.class);
moduleBService = initService(baseUrl, ModuleBService.class);
}
private static <T> T initService(String baseUrl, Class<T> clazz) {
OkHttpClient.Builder builder = new OkHttpClient().newBuilder();
OkHttpClient client = builder.build();
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(baseUrl)
.addConverterFactory(FastJsonConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.client(client)
.build();
return retrofit.create(clazz);
}
}
Over