使用doOnSubscribe和doFinally使Rxjava代码更整洁

原文地址:https://medium.com/@ValCanBuild/making-rxjava-code-tidier-with-doonsubscribe-and-dofinally-3748f223d32d#.33dq74dav

使用Rxjava的很多时候都会遵循相同的模式,一个常见的示例就是我们在应用程序中加载网络数据,几乎所有情况下的代码都是这样的:

  • 显示加载状态
  • 加载数据
  • 当数据已经加载完毕的时候需要隐藏加载状态和更新UI
  • 如果出现了错误,隐藏加载状态然后显示一些错误信息

下面就是我们经常使用的代码:

public void onViewCreated(View view){
  view.showLoadingIndicator();
  
  loadFromServer()
    .compose(applySchedulers())
    .subscribe(data -> {
      view.hideLoadingIndicator();
      view.showData(data);
    },error -> {
      view.hideLoadingIndicator();
      view.showError(error);
    });
  
  loadData();
}

你可能已经发现了,我们经常会写这些重复的代码,比如说view.hideLoadingIndicator(),你可能会觉得这些不值得一提,但是有时候我们会遇到更加复杂的逻辑,所以我们要尽量的简化这些代码:

这里要介绍两个方便的操作符,使用它们会是代码更加清洁,doOnSubscribedoFinally(这是RxJava2的操作符),现在看一下它们能做什么:

  • doOnSubscribe - 修改源,以便从订阅者订阅是调用给定的操作
  • doFinally - 在onError和或onCompleted后调用指定的操作,或由下游处理。

第一个允许我们在观察着订阅时立即执行动作,第二个语序我们在调用完成时立即执行动作,不管他是否成功。

在上面的示例中使用这两个操作符:

public void onViewCreated(View view){
  loadFromServer()
    .compose(applySchedulers)
    .doOnSubscribe(_ -> view.showLoadingIndicator())
    .doFinally(() -> view.hideLoadingIndicator())
    .subscribe(data -> {
      view.showData(data);
    },error -> {
      view.showError(error);
  });
  loadData();
}

小的改变,但是却整理我们代码的风格,设置这些代码现在就可以作为链的一部分来执行,订阅处理程序只处理与他们直接相关的内容。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,314评论 25 709
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,107评论 19 139
  • 作者寄语 很久之前就想写一个专题,专写Android开发框架,专题的名字叫 XXX 从入门到放弃 ,沉淀了这么久,...
    戴定康阅读 12,228评论 13 85
  • 这几天莫名其妙的发现github上不去了,我去,作为一个开发者这个网站上不去了多么痛苦,于是就百度百度,找到了解决...
    其实你懂De阅读 12,370评论 2 2
  • 段誉和王语嫣吃了一惊,两人手挽着手,隐身树后,向声音来处看去,只见慕容复坐在一座土坟之上,头戴高高的纸冠,神色俨然...
    高大杰阅读 3,514评论 0 1

友情链接更多精彩内容