RxJava + Retrofit封装,包含对相同格式请求数据、相同格式返回数据处理,显示Material Design加载dialog,文件上传下载进度展示、全局异常捕捉。
实现功能:
1、对于相同格式请求数据统一处理;
2、对于相同返回结果进行预处理;
3、显示加载dialog;
4、支持文件带进度上传下载。
主要几个类作用:
1、RetrofitUtils.java
主要是数据post、get等请求工具类,所有请求调用doHttp()方法。
2、RetrofitFileUtils.java
主要用于文件下载工具类,包含uploadFile()文件上传、downloadFile()文件下载两个方法。
3、BaseFileDownload.java
文件下载请求基类,文件下载请求实体类需继承该类实现内部方法。
4、BaseFileUpload.java
文件上传请求基类,文件上传请求实体类需继承该类实现内部方法。
5、HttpResultFunc.java
基本数据请求基类,数据请求实体类需继承该类实现内部方法。
6、RetrofitService.java
主要用于管理请求接口,设置请求地址等。如需修改类名请在调用地方相应进行修改。
#Usage
使用方法,这里主要以post请求为例;
1、在RetrofitService.java中配置请求地址:
@FormUrlEncoded
@POST("diseaseDBapi/getDisease")
Observable<ResponseResult<DiseaseDetail>> getDiseaseDetail(@Field("diseaseId") int id);
2、定义一个类继承HttpResultFunc.java
public class DiseaseDetailPost extends HttpResultFunc {
private Subscriber subscriber;//带加载进度的Subscriber
private int id;//请求参数,如有更多请求字段相应添加即可
public DiseaseDetailPost(Subscriber subscriber, int id) {
this.subscriber = subscriber;
this.id = id;
}
@Override
public Observable getObservable(RetrofitService retrofitService) {
return retrofitService.getDiseaseDetail(id);//调用请求方法
}
@Override
public Subscriber getSubscriber() {
return subscriber;
}
}
3、现在就可以进行调用了。
RetrofitUtils.getInstance().doHttp(new DiseaseDetailPost(new ProgressSubscriber<DiseaseDetail>(MainActivity.this) {
@Override
public void onNext(DiseaseDetail diseaseDetail) {
mResultTextView.setText(diseaseDetail.toString());
}
},7937));
这里就演示这个例子了,更多使用方法可以直接看demo。
最后非常感谢RxJava 与 Retrofit 结合的最佳实践和Retrofit2文件上传下载及其进度显示