两种方式封装Retrofit+协程,实现优雅快速的网络请求

本文介绍了两种使用Kotlin封装Retrofit+协程的方法,以实现优雅、快速的网络请求。第一种方式代码量少,自带加载指示,但解耦不彻底;第二种方式更加解耦,适合多数据源场景。两种方式通过定义数据返回类、统一处理网络请求和扩展LiveData简化代码。选择适合自己项目需求的方案,提升开发效率。
摘要由CSDN通过智能技术生成

目的

  • 简单调用、少写重复代码

  • 不依赖第三方库(只含Retrofit+Okhttp+协程)

  • 完全不懂协程也能立马上手(模板代码)

  • 用Kotlin的方式写Kotlin代码,什么意思呢?对比一下下面2个代码就知道了: 

mViewModel.wxArticleLiveData.observe(this, object : IStateObserver<List<WxArticleBean>>() {

    override fun onSuccess(data: List<WxArticleBean>?) {
    }

    override fun onError() {
    }
})
mViewModel.wxArticleLiveData.observeState(this) {

    onSuccess { data: List<WxArticleBean>? ->
    }

    onError {
    }
}

既然是用Kotlin了,就不要用Java的方式写接口回掉了,DSL表达式不香么?

提供两种方式实现:

  • 方式一代码量更少,网络请求自带Loading,不需要手动调用Loading
  • 方式二解耦更彻底

两种方式设计思路在解耦这一块存在差异,看具体需求,没有谁好谁差,依照自己的项目,哪个更方便用哪个。

基于官方架构的封装:

一、封装一

Activity中的代码示例

点击请求网络

mViewModel.getArticleData()

设置监听,只监听成功的结果,使用默认异常处理

mViewModel.wxArticleLiveData.observeState(this) {
    onSuccess { data ->
        Log.i("wutao","网络请求的结果是:$data")
    }
}

如果需要单独处理每一个回调

这些回调都是可选的,不需要可不实现

mViewModel.wxArticleLiveData.observeState(this) {
    onSuccess { data ->
        Log.i("wutao","网络请求的结果是:$data")
    }

    onEmpty{
        Log.i("wutao", "返回的数据是空,展示空布局")
    }

    onFailed {
        Log.i("wutao", "后台返回的errorCode: $it")
    }

    onException { e ->
        Log.i("wutao","这是非后台返回的异常回调")
    }

    onShowLoading {
         Log.i("wutao","自定义单个请求的Loading")
    }

    onComplete {
        Log.i("wutao","网络请求结束")
    }
}

请求自带Loading

很多网络请求都需要Loading,不想每次都写onShowLoading{}方法,也so easy。

mViewModel.wxArticleLoadingLiveData.observeState(this, this) {
    onSuccess { data ->
        Log.i("wutao","网络请求的结果是:$data")
    }
}

observeState()第二个方法传入ui的引用就可,

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值