} catch (e: Exception) {
//非后台返回错误,捕获到的异常
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,根据