RxHttp - 轻量级、可扩展、易使用、完美兼容MVVM、MVC架构的网络封装类库

RxHttp是基于RxJava2+Retrofit 2.9.0+OkHttp 4.9.0实现的轻量级完美兼容MVVM架构的网络请求封装类库,小巧精致,简单易用,轻轻松松搞定网络请求。

GitHub

https://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项目

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpsywy.html