MVVMSmart系列文章--Android 封装网络状态的LiveData

2,010 阅读1分钟

但网络请求中的五种状态如何封装? 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();
                    }
                }
            });

'''