目的
-
简单调用、少写重复代码
-
不依赖第三方库(只含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
的引用就可,这样单个网络请求之前会自动加载Loading,成功或者失败自动取消Loading。
上面代码都是Activity中,我们来看下ViewModel中。
ViewModel中代码示例
c