android-RxJava缓存网络调用

android-RxJava缓存网络调用,第1张

概述好的,所以我正在做一个项目,我需要从服务器获取Json,获取相应的POJO,填充一些视图并结束.我面临的问题是,我必须嵌套网络调用才能获得所需的最终数据.为了最小化网络调用,我必须重用它们,这导致了真正复杂的RxOperator链.例如:getCarId()//networkcall.flatMap(carIdObj-

好的,所以我正在做一个项目,我需要从服务器获取Json,获取相应的POJO,填充一些视图并结束.

我面临的问题是,我必须嵌套网络调用才能获得所需的最终数据.为了最小化网络调用,我必须重用它们,这导致了真正复杂的RxOperator链.例如:

getCarID() // network call   .flatMap(carIdobj -> getCarModelByID(carIdobj)                           .doOnNext(... update car vIEws)                           .flatMap(carModelObj -> { return carIdobj;}        .flatMap(carIdobj --> getTruckModelByID(carIdobj)                           .doOnNext(... update truck vIEws)                           .flatMamp(truckModelObj -> { return carIdobj; }

解释运算符链(这是一个示例)

>获取所有汽车ID(网络电话1)
>对于每个车号,找到真正的车
>从汽车ID(网络call2)获取汽车型号
>用汽车模型更新视图
>获取所有汽车ID(网络电话3)
>对于每个车号,找到卡车
>从汽车ID(网络电话4)获取卡车型号
>用卡车模型更新视图

因此,网络呼叫1和网络呼叫3相同,因此我应该重用它们,这意味着我应该只调用一次并保存数据.这就是为什么Rx-Operator链接在上面的原因.

我的问题是,有什么办法可以做到这一点,但是要缓存网络call1而不是这个可怕的,难以理解的 *** 作符链?

我不了解缓存的工作方式,该如何将此运算符应用于这种情况?

解决方法:

cache正是您所需要的,这是您的用法:

cachedCarIDs = getCarIDs().cache();cachedCarIDs.map(this::getCarModelByID).subscribe(... update car vIEws);cachedCarIDs.map(this::getTruckModelByID).subscribe(... update truck vIEws);

cache()将确保订阅ID仅执行一次(第一次订阅时),并且其所有值都将保存以供将来的订阅者使用.

总结

以上是内存溢出为你收集整理的android-RxJava缓存网络调用全部内容,希望文章能够帮你解决android-RxJava缓存网络调用所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1120448.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存