原項(xiàng)目地址:高仿知乎日?qǐng)?bào) Material Design + MVP + RxJava + Retrofit for android
項(xiàng)目目錄結(jié)構(gòu):
我們主要分析RxJava + Retrofit的部分跛溉。
在api目錄下就是網(wǎng)絡(luò)請(qǐng)求部分浙巫。entity目錄下主要是一些數(shù)據(jù)模型類次企,這個(gè)大家應(yīng)該都很熟悉了豌鹤。
在*API.java文件中定義了相應(yīng)的接口今穿。
在 Networks類中就是我們封裝各個(gè)網(wǎng)絡(luò)請(qǐng)求方法的重點(diǎn)星掰。
public class Networks {
private static final int DEFAULT_TIMEOUT = 5;
private static Retrofit retrofit;
private static CommonApi mCommonApi;
private static CommentsApi mCommentsApi;
private static ThemeApi mThemeApi;
private static Networks mNetworks;
public static Networks getInstance() {
if (mNetworks == null) {
mNetworks = new Networks();
}
return mNetworks;
}
public CommonApi getCommonApi() {
return mCommonApi == null ? configRetrofit(CommonApi.class) : mCommonApi;
}
public CommentsApi getCommentsApi() {
return mCommentsApi == null ? configRetrofit(CommentsApi.class) : mCommentsApi;
}
public ThemeApi getThemeApi() {
return mThemeApi == null ? configRetrofit(ThemeApi.class) : mThemeApi;
}
private <T> T configRetrofit(Class<T> service) {
retrofit = new Retrofit.Builder()
.baseUrl(BuildConfig.API_BASE_URL)
.client(configClient())
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.build();
return retrofit.create(service);
}
private OkHttpClient configClient() {
OkHttpClient.Builder okHttpClient = new OkHttpClient.Builder()
.connectTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS);
return okHttpClient.build();
}
}
根據(jù)每個(gè)不同的接口定義不同的函數(shù)赵抢,返回相應(yīng)的數(shù)據(jù)類型。