retrofit 会请求两次_Retrofit2+Rxjava-Rxjava2.x-篇二-依次执行多个请求-flatMap/map

这篇博客探讨了在Retrofit2和RxJava2.x中如何避免网络请求被触发两次的问题,以及如何使用map和flatMap进行链式处理。通过示例代码详细解释了如何在不同线程间切换,如何使用map进行预处理,以及如何使用flatMap处理多个请求。文章强调了flatMap在处理返回ObservableSource时的优势,以及在处理顺序性需求时可以使用concatMap。
摘要由CSDN通过智能技术生成

继续上一篇之后 MonkeyLei:Retrofit2+Rxjava-Rxjava2.x-篇一-用起来 ,上篇简单的对网络请求做了实践,过程对上下游线程,对线程切换,以及map/flatmap的简单做了了解。然后对RxJava1.x和RxJava2.x的区别那些也做了了解,相关的链接,官方的/网友的都是小萌新忒么搬来的,O(∩_∩)O哈哈~

小萌新上一篇还想这样:就是知识看的太少了,不知道咋整。。。

实际上,群友都告诉我说,你要么再封装一层Observable,当然也可以用操作符map/flatmap这些来做链式处理!所以可能可能要纠正下之前的说法!

map看看呢!

.observeOn(Schedulers.io()) // 还可以指定一个io线程, 用map的形式进行预处理

.map(object: Function, List>{

override fun apply(t: List): List {

Log.e("observable map", "flatMap thread'name=" + Thread.currentThread().name)

return t

}

})

flatMap看看呢? -链表List我们可以做一些特殊,甚至是耗时处理!

.observeOn(Schedulers.io()) // 上一次请求的结果回调中,我们还是拿来在io线程中做预处理

.flatMap(object: Function, ObservableSource>>{

override fun apply(t: List): ObservableSource> {

// 这里是io线程,可以做一些耗时操作,然后返给onNext的UI线程

Log.e("observable", "flatMap thread'name=" + Thread.currentThread().name)

// 原样的给返回去

return Observable.fromArray(t);

}

})

你要注意,这种线程指定与处理的成对出现!map/flatMap处理后,之后你可以切换到UI线程:

.observeOn(AndroidSchedulers.mainThread()) // 请求都完成后,切换到UI线程,将结果进行渲染

然后就可以进行subscribe的一个订阅,此时请求启动!这种逻辑小萌新要注解熟悉,当然可能重要的是看人家如何设计的,思想应该更

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值