像使用gradle一样,在kotlin中进行网络请求

本文介绍了如何在Kotlin中模仿Gradle的DSL风格进行网络请求的封装。通过扩展函数和infix关键字,使得网络请求的调用方式更简洁、直观,类似于Gradle的配置语法。
摘要由CSDN通过智能技术生成

前言

DSL是Domain-specific language(领域特定语言)的缩写,维基百科的定义是指的是专注于某个应用程序领域的计算机语言。
这种说法看起来很抽象,其实大家很常用的gradle就是DSL最常用体现,可以看一下android project中的build.gradle:

image

 

android{}, dependencies{}这种都是DSL的表现形式,相对于传统的写法更加简洁、表现内容更加明显,如配置文件般的去执行方法,这也是为什么推荐DSL写法的原因。

以下封装的标准DSL请求方式如下:

image

 

 

对比之后我们发现可以说是和gradle基本一样,接下来就展示如何封装。

request2

分析

  • 首先请求是放在一个request对象内
  • request内包含多个方法loader、start、onSuccess等,作用也很明显就是,不再过多阐述

构建request

class Request<T> {
    lateinit var loader: suspend () -> T

    var start: (() -> Unit)? = null

    var onSuccess: ((T) -> Unit)? = null

    var onError: ((String) -> Unit)? = null

    var onComplete: (() -> Unit)? = null

    var addLifecycle: LifecycleOwner? = null

    fun request() {
        request(addLifecycle)
    }

    fun request(addLifecycle: LifecycleOwner?) {

        GlobalScope.launch(context = Dispatchers.Main) {

            start?.invoke()
            try {
                val deferred = GlobalScope.async(Dispatchers.IO, start = CoroutineStart.LAZY) {
                    loader()
                }
                addLifecycle?.apply { lifecycle.addObserver(CoroutineLifecycleListener(deferred, lifecycle)) }
                val result = deferred.await()
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值