一、工程目录
基础的一级文件夹有app(基类)、service(mvp+网络)、ui、util、view(自定义View)。
二、构建网络请求框架
1. 导入依赖
dependencies {
// Okhttp
implementation 'com.squareup.okhttp3:okhttp:3.10.0'
implementation 'com.squareup.okhttp3:logging-interceptor:3.6.0'
// Retrofit (Gson数据解析器、rxjava适配器)
implementation 'com.squareup.retrofit2:retrofit:2.3.0'
implementation 'com.squareup.retrofit2:converter-gson:2.3.0'
implementation 'com.squareup.retrofit2:adapter-rxjava2:2.2.0'
// rxjava
implementation 'io.reactivex.rxjava2:rxjava:2.2.3'
implementation 'io.reactivex.rxjava2:rxandroid:2.1.0'
}
2. 定义网络请求接口
1) 保存所有url,方便维护:Net.java
public class Net {
//baseurl
public static final String TIAN_API_URL="http://api.tianapi.com/";
//请求新闻频道
public static final String GET_NEWS_TYPE = "/channellist/index?key=7fcd5df****6e0f";
//请求分类、筛选新闻
public static final String POST_SORT_NEWS = "/allnews/index?";
}
2) 返回体Model,根据接口文档返回的json生成 :NewsRootBean.java、NewsTypeBean.java、NewsSortBean .java
public class NewsRootBean<T> {
private int code;
private String msg;
private List<T> newslist;
//省略掉getter、setter
}
3)定义接口:RetrofitService.java
public interface RetrofitService {
//请求新闻频道
@GET(Net.GET_NEWS_TYPE)
Observable<NewsRootBean<NewsTypeBean>> getNewsTypeList();
//请求分类、筛选新闻
@GET(Net.POST_SORT_NEWS)
Observable<NewsRootBean<NewsSortBean>> requestNewsSortList(@Query("key") String key, @Query("num") int num, @Query("col") int col, @Query("page") int page);
}
4)创建日志拦截器,利于更直观的查看请求日志:LogInterceptor.java
public class LogInterceptor {
public static HttpLoggingInterceptor getLogInterceptor() {
return new HttpLoggingInterceptor(new HttpLoggingInterceptor.Logger() {
@Override
public void log(String message) {
Log.i(Content.LOG_TAG,"Log--->>>" + message);
}
//设置打印数据的级别
}).setLevel(HttpLoggingInterceptor.Level.BODY);
}
}
5)初始化并创建Retrofit,提供获取RetrofitService的方法:RetrofitHelper.java
public class RetrofitHelper {
public Context context;
private