RxHttp是基于RxJava2+Retrofit 2.9.0+OkHttp 4.9.0实现的轻量级,完美兼容MVVM架构的网络请求封装类库,小巧精致,简单易用,轻轻松松搞定网络请求。
GitHubhttps://github.com/kongpf8848/RxHttp
亮点
代码量极少,类库大小不足100kb,但足以胜任大部分APP的网络请求任务,浓缩的都是精华啊_^_
完美兼容MVVM,MVC架构,兼容Kotlin和Java,Kotlin+MVVM+RxHttp组合使用更酸爽,MVVM官方推荐,抱紧Google大腿就对了
完美解决泛型类型擦除的棘手问题,还原泛型的真实类型
天生支持网络请求和Activity,Fragment生命周期绑定,界面销毁时自动取消网络请求回调
天生支持多BaseUrl,支持动态传入Url
支持自定义OkHttpClient.Builder,可高度自定义网络请求参数
支持Glide等和网络请求公用一个OkHttpClient,充分利用OkHttpClient的线程池和连接池,大部分情况下一个App一个OkHttpClient就够了
支持GET,POST,PUT,DELETE等请求方式,支持文件上传及进度监听,支持同时上传多个文件,支持Uri上传
支持文件下载及进度监听,支持大文件下载,支持断点下载
使用要求项目基于AndroidX,Java8+,minSdkVersion>=21
使用 implementation 'com.github.kongpf8848:RxHttp:1.0.11' 配置(可选) RxHttpConfig.getInstance() /** * 失败重试次数 */ .maxRetries(3) /** * 每次失败重试间隔时间 */ .retryDelayMillis(200) /** * 自定义OkHttpClient.Builder(),RxHttp支持自定义OkHttpClient.Builder(), * 如不定义,则使用RxHttp默认的OkHttpClient.Builder() */ .builder(OkHttpClient.Builder().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) /** *保存文件名称 */ .filename(filename) /** * 是否为断点下载,默认为false */ .breakpoint(true) /** * 下载地址,如 */ .url(url) /** * 请求Tag */ .tag(null) /** * 下载回调 */ .enqueue(object: DownloadCallback() { /** * 下载开始时回调 */ override fun onStart() { } /** * 下载完成时回调 */ override fun onNext(response: DownloadInfo?) { } /** * 下载失败时回调 */ override fun onError(e: Throwable?) { } /** * 下载完成之后回调 */ override fun onComplete() { } /** * 下载进度回调 */ override fun onProgress(readBytes: Long, totalBytes: Long) { } })取消请求
/** * tag:Any?,请求Tag,对应网络请求里的Tag值 * 如不为null,则取消指定网络请求, * 如为null,则取消所有网络请求 */ RxHttp.getInstance().cancelRequest(tag) 项目实战此处假设服务端返回的数据格式为{"code":xxx,"data":T,"msg":""},其中code为响应码,整型,等于200时为成功,其余为失败,data对应的数据类型为泛型(boolean,int,double,String,对象{ },数组[ ]等类型)
{ "code": 200, "data":T, "msg": "" }对应的Response类为
class TKResponse<T>(val code:Int,val msg: String?, val data: T?) : Serializable { companion object{ const val STATUS_OK=200 } fun isSuccess():Boolean{ return code== STATUS_OK } }
MVC项目