RxHttp
项目地址:kongpf8848/RxHttp
简介: 基于 RxJava2+Retrofit+OkHttp4.x 封装的网络请求类库,亮点多多,完美兼容 MVVM(ViewModel,LiveData),天生支持网络请求和生命周期绑定,天生支持多 BaseUrl,支持文件上传下载进度监听,支持断点下载,支持 Glide 和网络请求公用一个 OkHttpClient
标签:
基于 RxJava2+Retrofit 2.9.0+OkHttp 4.9.0 实现的轻量级,完美兼容 MVVM 架构的网络请求封装类库,小巧精致,简单易用,网络请求原来如此简单:smirk::smirk::smirk:
亮点
-
代码量极少,类库体积不足 100kb,但足以胜任大部分 APP 的网络请求任务,浓缩的都是精华啊^
-
完美兼容 MVVM,MVC 架构,兼容 Kotlin 和 Java,Kotlin+MVVM+RxHttp 结合起来使用更酸爽,MVVM 官方推荐,抱紧 Google 大腿就对了
-
完美解决泛型类型擦除的棘手问题,还原泛型的真实类型
-
天生支持网络请求和 Activity,Fragment 生命周期绑定,界面销毁时自动取消网络请求回调
-
天生支持多 BaseUrl,支持动态传入 Url
-
支持自定义 OkHttpClient.Builder,可高度自定义网络请求参数,支持 Https 证书单向校验(客户端校验服务端证书)
-
支持 Glide 等和 Http 请求公用一个 OkHttpClient,充分利用 OkHttpClient 的线程池和连接池,大部分情况下一个 App 一个 OkHttpClient 就够了
-
支持 GET,POST,PUT,DELETE 等请求方式,支持文件上传及进度监听,支持同时上传多个文件,支持 Uri 上传
-
支持文件下载及进度监听,支持大文件下载,支持断点下载
使用要求
项目基于 AndroidX,Java8+,minSdkVersion>=21
使用
- 在项目根目录的 build.gradle 文件中添加:
allprojects { repositories { mavenCentral() } }
- 在具体 Module 的 build.gradle 文件中添加:
implementation 'io.github.kongpf8848:RxHttp:1.0.12'
配置(可选)
RxHttpConfig.getInstance()
/**
* 失败重试次数
*/
.maxRetries(3)
/**
* 每次失败重试间隔时间
*/
.retryDelayMillis(200)
/**
* Https 证书校验,单向校验,即客户端校验服务端证书,null 则为不校验
*/
//.certificate(AssetUtils.openFile(applicationContext,"xxx.cer"))
/**
* 设置 OkHttpClient.Builder(),RxHttp 支持自定义 OkHttpClient.Builder()
*/
.getBuilder().apply {
connectTimeout(60, TimeUnit.SECONDS)
readTimeout(60, TimeUnit.SECONDS)
writeTimeout(60, TimeUnit.SECONDS)
/**
* DEBUG 模式下,添加日志拦截器,建议使用 RxHttp 中的 FixHttpLoggingInterceptor,使用 OkHttp 的 HttpLoggingInterceptor 在上传下载的时候会有 IOException 问题
*/
if (BuildConfig.DEBUG) {
addInterceptor(FixHttpLoggingInterceptor().apply {
level = FixHttpLoggingInterceptor.Level.BODY
})
}
}
基础使用
- GET/POST/PUT/DELETE/上传请求
RxHttp.getInstance()
/**
* get:请求类型,可为 get,post,put,delete,upload,分别对应 GET/POST/PUT/DELETE/上传请求
* context:上下文,可为 Context,Activity 或 Fragment 类型,当 context 为 Activity 或 Fragment 时网络请求和生命周期绑定
*/
.get(context)
/**
* 请求 url,如 https://www.baidu.com
*/
.url("xxx")
/**
*请求参数键值对,类型为 Map<String, Any?>?,如 hashMapOf("name" to "jack")
*/
.params(map)
/**
*每个网络请求对应的 tag 值,可为 null,用于后续手动根据 tag 取消指定网络请求
*/
.tag("xxx")
/**
* HttpCallback:网络回调,参数 xxx 为返回数据对应的数据模型,
* 类似 RxJava 中的 Observer,onComplete 只有在 onNext 回调之后执行,如发生错误则只会回调 onError 而不会执行 onComplete
*/
.enqueue(object : HttpCallback<xxx>() {
/**
* http 请求开始时回调
*/
override fun onStart() {
}
/**
* http 请求成功时回调
*/
override fun onNext(response: xxx?) {
}
/**
* http 请求失败时回调
*/
override fun onError(e: Throwable?) {
}
/**
* http 请求成功完成时回调
*/
override fun onComplete() {
}
/**
* 上传进度回调,请求类型为 upload 时才会回调
*/
override fun onProgress(readBytes: Long, totalBytes: Long) {
}
})
- 下载请求
RxHttp.getInstance()
/**
* download:请求类型,下载请求
* context:上下文,如不需要和生命周期绑定,应该传递 applicationContext
*/
.download(context)
/**
* 保存路径
*/
.dir(dir)
/**