原项目地址:高仿知乎日报 Material Design + MVP + RxJava + Retrofit for android
项目目录结构:
我们主要分析RxJava + Retrofit的部分。
在api目录下就是网络请求部分。entity目录下主要是一些数据模型类,这个大家应该都很熟悉了。
在*API.java文件中定义了相应的接口。
在 Networks类中就是我们封装各个网络请求方法的重点。
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();
}
}
根据每个不同的接口定义不同的函数,返回相应的数据类型。