io.github.caldremch:coroutine-http

http request framework implementation


Keywords
coroutines-android, design-patterns, koin-android, okhttp3, retrofit2, rxjava2
License
Apache-2.0

Documentation

main API

[http-core最新版本]-->maven

[android-http-retrofit-rxjava3最新版本]-->core

[coroutine-http最新版本]-->core

轻量的 框架-实现 网络请求库, 支持常规的[链式调用]和[泛型]处理

通过对网络请求底层框架的定义,简单的链式调用封装, 关于网络请求库的扩展实现都是基于koin去完成.

使用

1. 在build.gradle中添加依赖

为了避免耦合, 请使用: runtimeOnly来依赖实现模块

//基础库 必须
implementation 'io.github.caldremch:http-core:1.2.2'

//实现库 (retrofit2+rxjava3)
runtimeOnly 'io.github.caldremch:android-http-retrofit-rxjava3:1.0.1'

//实现库 (kotlin协程实现)
runtimeOnly 'io.github.caldremch:coroutine-http:1.0.1'

//自己的实现库
runtimeOnly project(':my-http-impl')

实现库可以自己写一个, 或者使用已经扩展好

2.初始化

  1. 需要先根据的业务情况去定义返回体的解析, 头部数据设置, 实现IHttpInit来注册koin模块, 实现可以参考demo中做法
class MyHttpInit : IHttpInit {
    override fun onLoaderCreate(): Module {
        return module {
            singleOf<IHeader> { HttpCommonHeaderImpl() } //通用头部实现
            factoryOf<ICommonRequestEventCallback> { //网络请求声明周期监听
                HttpObsHandlerImpl()
            }
            factoryOf<IConvertStrategy> { //根据业务实现的ResponseBody转换策略
                ConvertStrategyImpl()
            }
            factory<IHttpDialogEvent> { (context: Context) -> HttpDialogEventImpl(context) } //根据业务实现的网络请求弹窗
            singleOf<IServerUrlConfig> { HttpUrlConfigImpl() } //多服务器url配置&切换
        }
    }
}
  1. 在调用网络请求之前(建议在Application的onCreate中)初始化
HttpManagerInitializer.init(MyHttpInit())
  1. 调用
 HttpManager
            .post("url")
            .put(Any())
            .put("key1","value1")
            .put("key2","value2")
            .bindDialogHandle(object : IDialogHandle{
                override fun dialogDismissTiming() {
                    //关闭dialog
                }

                override fun dialogShowTiming(dialogTips: String) {
                    //显示dialog
                }
            })
            .bindRequestHandle(object : IRequestHandle {
                override fun onRequestHandle(ctx: IRequestContext) {
                    //可以操作ctx.cancel来取消网络请求
                }
            })
            .disableToast()//关闭toast
            .formUrlEncoded()//FormUrlEncoded
            .postQuery()//put的参数将会拼接在请求连接后面
            .noCustomerHeader()//没有任何的header
            .path("", "")//能实现Retrofit @Path的功能
            .showDialog("")//bindDialogHandle不会显示dialog, 只是绑定了一个操作, showDialog才会真正显示
            .channel(1)// 这里跟IServerUrlConfig对应, channel的值对应的是 不同服务器域名的请求, 默认不调用channel是null为默认服务器
            .postFutureTask<Any>() //未来执行的任务, 返回的是IFutureTask对象, 根据该对象调用执行方法才会执行, 对应的还有getFutureTask
            .postFullFutureTask<Any>()//未来执行的任务, 返回的是IFullFutureTask对象, 根据该对象调用执行方法才会执行, 对应的还有getFullFutureTask
            .posExec<Any>(error = {
                //error回调
                ToastUtils.show(it?.message)
            }) { 
                //success回调
                ToastUtils.show(Gson().toJson(it))
            }
            .posExec<Any> { 
                //只回调success
            }

其中包含的一些扩展方法, 更多的扩展方法可以查看 http-core里面的 HttpExt.kt文件

注意

需要添加gson和koin的依赖