开发者社区> 问答> 正文

Retrofit+Rxjava链式编程如何添加条件? 400 报错

Retrofit+Rxjava链式编程如何添加条件? 400 报错

通过Retrofit+Rxjava可以实现一个链式的http请求,类似这样

    client
	.getRestAPI()
	.getAppdataVersion()
	.flatMap(new Func1<AppdataVersionEntity, Observable<AppdataDownLoadEntity>>() {//调用第一个接口(A接口)**注释1**
		@Override
		public Observable<AppdataDownLoadEntity> call(AppdataVersionEntity appdataVersionEntity) {
			if(){
				//如果发生了改变,就去调用接口B
				return  client.getRestAPI().getAppdataDownLoad();
			}else{
				//如果没发生改变,做一些逻辑
			}
			return null;//如果return null就继续向下执行,并不会crash
		}
	})
	.subscribeOn(Schedulers.io())
	.observeOn(AndroidSchedulers.mainThread())
	.subscribe(new Observer<AppdataDownLoadEntity>() {
		@Override
		public void onNext(AppdataDownLoadEntity appdataDownLoadEntity) {
			//这是执行接口B,做一些逻辑
		}
		@Override
		public void onCompleted() {
			JLogUtils.i("robin3","onCompleted");
		}

		@Override
		public void onError(Throwable e) {
			e.printStackTrace();
		}

	})

这种是简单的request1request2链式,1请求之后到2

现在有一个奇特的需求,有1、2、3三个http请求,请求顺序是:

首先请求1,

如果1的返回结果不符合标准,那么就请求2,然后2再请求3

如果1的返回结果符合标准,直接请求3

也就是说1和3一定请求,中间的2根据条件判断可能会跳过,这种能通过Retrofit+Rxjava写成链式结构吗?

如果可以,该怎么写?

感谢回复的大佬

展开
收起
爱吃鱼的程序员 2020-05-29 17:53:48 632 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    参考如下代码:

    Observable
            .create((ObservableEmitter<Integer> emitter) -> {//第一个请求
                emitter.onNext(new Random().nextInt());
                emitter.onComplete();
            })
            .flatMap((Integer i) -> {
                if (i % 2 == 0) {   //判断条件
                    return Observable.create(emitter -> { //第二个请求
                        emitter.onNext(String.valueOf(i));
                        emitter.onComplete();
                    });
                } else {            //直接通过
                    return Observable.just(String.valueOf(0));
                }
            })
            .flatMap((String s) -> Observable.<Boolean>create(emitter -> { //第三个请求
                emitter.onNext(s == null || s.isEmpty());
                emitter.onComplete();
            }))
            .subscribe(new Observer<Boolean>() {
                @Override
                public void onSubscribe(Disposable disposable) {

                }

                @Override
                public void onNext(Boolean aBoolean) {
                    //处理结果
                }

                @Override
                public void onError(Throwable throwable) {

                }

                @Override
                public void onComplete() {

                }
            });

    2020-05-29 17:53:49
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载