但网络请求中的五种状态如何封装? Idle, Loading, Success, Error, NoData 几乎每个页面都要请求网络, 5个Livedata? no no no. 完美解决方案送上
- 在Android MVVM架构中,LiveData作为ViewModel和UI通信的桥梁,地位极其重要,可以说是MVVM的核心组件。
- MVVMsmart地址:github.com/wzqjava/MVV…
- 分支名称:MVVMSmart-kotlin(切换分支,readme会自动切换成对应语言)
- 分支名称:MVVMSmart-java(切换分支,readme会自动切换成对应语言)
- MVVMSmart开源框架,基于谷歌最新AAC架构,MVVM设计模式的一套快速开发库,整合ViewModel+Lifecycles+Navigation+DataBinding+LiveData+Okhttp+Retrofit+RxJava+Glide等主流模块,满足日常开发需求。使用该框架可以快速开发高质量、易维护的Android应用。 这个是我们网易项目组改造成的MVVMSmart,以后项目组会持续维护,直至整理成易用且可商用的高质量库.欢迎Start并Fork提建议
网络请求中的五种状态如何封装?
- Idle,
- Loading,
- Success,
- Error,
- NoData
几乎每个页面都要请求网络, 5个Livedata? no no no. 完美解决方案送上
思路: 只使用1个LiveData, 各种状态的发布只用一行代码, UI层和viewMode解耦.
使用:
UI层收到消息进行处理 '''
/** 每个界面默认页效果不同
* 在这里可以动态替换 无网络页,数据错误页, 无数据默认页;
*/
viewModel.stateLiveData.state
.observe(this, new Observer<StateLiveData.State>() {
@Override
public void onChanged(StateLiveData.State state) {
if (state.equals(StateLiveData.State.Loading)) {
KLog.e("请求数据中--显示loading");
showLoading("请求数据中...");
}
if (state.equals(StateLiveData.State.Success)) {
KLog.e("数据获取成功--关闭loading");
dismissLoading();
}
if (state.equals(StateLiveData.State.Idle)) {
KLog.e("空闲状态--关闭loading");
dismissLoading();
}
}
});
'''
- MVVMSmart开源项目中已经封装好,欢迎start,下载拷贝出来即可使用. 源码地址:github.com/wzqjava/MVV…