【Jetpack篇】协程+Retrofit网络请求状态封装实战(2)

baseResp.dataState = DataState.STATE_ERROR
baseResp.error = e
} finally {
stateLiveData.postValue(baseResp)
}
}
}

executeResp()为数据请求的公共方法,该方法传入了两个参数,第一个是将数据请求函数当作参数,第二个就是上面新建的StateLiveData

方法一开始就新建了一个BaseResp()对象,将DataState.STATE_LOADING状态设置给BaseResp的dataState,接着开始对数据请求进行异常处理(具体可查看上一篇),如果code=0表示接口请求成功,否则表示接口请求成功,服务器返回错误。在code=0时,对返回数据进行判空处理,因为数据有多种类型,这里需要自己设置类型进行判断,为空就将状态设置为DataState.STATE_EMPTY,否则为

DataState.STATE_SUCCESS。如果抛出异常,则将状态设置为DataState.STATE_ERROR,在请求结束后,利用stateLiveData将带有状态的baseResp分发给UI。

到这里,请求状态都设置完成,接下来只需要根据不同状态,开始进行界面切换处理。

三、结合LoadSir界面切换

LoadSir是一个加载反馈页管理框架,状态页自动切换,具体使用在这里就不描述了,需要的可移步github查看。

LiveData接收数据变化时,UI会先注册一个接收事件的观察者,接收到请求的数据后就进行UI更新,第二节里将不同状态也添加到了数据中,要想对状态也进行监听的话,就需要对Observer进行状态处理。

/**

  • LiveData Observer的一个类,
  • 主要结合LoadSir,根据BaseResp里面的State分别加载不同的UI,如Loading,Error
  • 同时重写onChanged回调,分为onDataChange,onDataEmpty,onError,
  • 开发者可以在UI层,每个接口请求时,直接创建IStateObserver,重写相应callback。
    */
    abstract class IStateObserver(view: View?) : Observer<BaseResp>, Callback.OnReloadListener {
    private var mLoadService: LoadService? = null

init {
if (view != null) {
mLoadService = LoadSir.getDefault().register(view, this,
Convertor<BaseResp> { t ->
var resultCode: Class = SuccessCallback::class.java

when (t?.dataState) {

//数据刚开始请求,loading
DataState.STATE_CREATE, DataState.STATE_LOADING -> resultCode =
LoadingCallback::class.java
//请求成功
DataState.STATE_

  • 26
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值