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
的引用就可,这样单个网络请求之前会自动加载Loading,成功或者失败自动取消Loading。
上面代码都是Activity中,我们来看下ViewModel中。
ViewModel中代码示例
class MainViewModel{
private val repository by lazy { WxArticleRepository() }
val wxArticleLiveData = StateLiveData<List>()
fun requestNet() {
viewModelScope.launch {
repository.fetchWxArticle(wxArticleLiveData)
}
}
}
很简单,引入对应的数据仓库Repo,然后使用协程执行网络请求方法。来看下Repo中的代码。
Repository中代码示例
class WxArticleRepository : BaseRepository() {
private val mService by lazy { RetrofitClient.service }
suspend fun fetchWxArticle(stateLiveData: StateLiveData<List>) {
executeResp(stateLiveData, mService::getWxArticle)
}
}
interface ApiService {
@GET(“wxarticle/chapters/json”)
suspend fun getWxArticle(): BaseResponse<List>
}
获取一个Retrofit实例,然后调用ApiService
接口方法。
封装一的优势
======