Android知识Android开发Android面试知识

使用doOnSubscribe和doFinally使Rxjava

2017-02-27  本文已影响4594人  小菜鸟程序媛

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

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

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

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的操作符),现在看一下它们能做什么:

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

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

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

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

上一篇 下一篇

猜你喜欢

热点阅读