一段代码逻辑 用RxJava 的话要咋写
谢邀。我大概提供2种思路。第一种比较常见,一般是在创建操作符里面调用dao.query,随后flatMap,根据传入的值是否为空调用网络请求 or 传入值本身,简单的例子如下: Dao dao = new Dao(); Observable.defer(() -\u0026gt; Observable.just(dao.query()) .flatMap(t -\u0026gt; t != null ? Observable.just(t) : Observable.create(new NetOnSubscribe()))//自定义一个OnSubscribe处理网络 .subscribe();或者也可以选择自己定义一个操作符处理本地的查询结果,其实流程和第一个是类似的。例如:import rx.Observable;import rx.Subscriber;/** * Created by gengwanpeng on 16/4/22. */public class OperatorIfNet\u0026lt;T\u0026gt; implements Observable.Operator\u0026lt;T, T\u0026gt; { @Override public Subscriber\u0026lt;? super T\u0026gt; call(Subscriber\u0026lt;? super T\u0026gt; subscriber) { return new Subscriber\u0026lt;T\u0026gt;(subscriber) { @Override public void onCompleted() { subscriber.onCompleted(); } @Override public void onError(Throwable e) { subscriber.onError(e); } @Override public void onNext(T t) { if(t == null) { HttpContactManager.getNameAndHeadUrlAsync(new DefaultCallback() { @Override public void onSuccess(Object object) { subscriber.onNext((T)object); } @Override public void onFailure(Throwable t){ subscriber.onError(t); } }); }else{ subscriber.onNext(t); } } }; }}调用就这样 Observable.defer(() -\u0026gt; Observable.just(dao.query())) .lift(new OperatorIfNet\u0026lt;\u0026gt;()) .subscribe();当然,别忘了根据需要在合适的地方插上切换线程的代码。还有,上面的operator是随手为之,不要直接用。值得一提的是为什么dao.query()放在defer里面,是让取值操作延迟到subscribe,从而可以切换线程,而不是创建Observable时就调用query()。完。
推荐阅读
- 侧重业务逻辑的产品需求规格说明书,需要有哪些要点
- 怎样对别人的代码进行适当修改使他永远也找不到问题出在哪
- 李嫣|李嫣这是怎么了?深夜更改账号签名,还发出一段伤感视频
- 作为一个打码的,有没有一段时间特不想打码,后来是咋熬过来的
- 异乡好居说程序员删除代码是未经证实的传言吗
- 销量|年增10%,年销350万辆!广汽定下“高调”目标有什么逻辑?
- 这段代码中对 vector 的访问为啥不会越界
- C语言指数函数代码
- 学计算机就是当码农吗
- 姑苏区|姑苏区:建设大运河文化带“最最精华的一段”
