RxJava 利用zip()实现两个请求合为一个请求

本文介绍了一种使用RxJava的zip()操作符来处理一次请求需要两个响应的情况。在设备应用开发中,APP发送指令给设备会收到两个响应:一个是设备接收指令的确认,另一个是设备完成操作的结果。为了保持业务流程的连续性和代码的可读性,作者选择了zip()方法将这两个响应合并处理。示例代码中使用了PublishSubject,因为其方便创建且在不需要立即定义发射数据逻辑时适用。
摘要由CSDN通过智能技术生成

本人是做设备相关的应用开发,在项目中遇到了一种奇葩的设计:

APP发送某功能指令给设备,设备收到后返回一个收到指令的响应,表示设备已经收到指令了,等设备完成动作后,会再次返回一个响应,表示操作的结果。即一次请求,两次响应。

为了更加明白的阐述问题,用一个图来进行说明:
请求流程

只要APP和设备的连接没有断开,一般情况下第一个响应很快就会收到,第二个响应相对久一点返回。此外,第一个响应不是使用EventBus post() 过来的,而第二个响应是EventBus post() 过来的。有的朋友说也可以在@Subscribe方法中更新界面,当然这样也可以。但是在此种情况下,EventBus虽然能解耦,也会使业务代码分散,难以阅读和维护。业务逻辑使用RxJava实现,用过RxJava的人应该都有体会,调用链断开是比较难受的。

为了解决这个问题,即使业务流不那么分散,我想到了zip() 操作符,我把整个请求流程看作两个请求,然后合成一个请求来写业务流。不啰嗦,上代码。

public class MainActivity extends AppCompatActivity {
   

    Observable<Integer> observable1;
    PublishSubject<Integer> observable2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
   
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        EventBus.getDefault().register(this)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值