Retrofit+Rxjava链式编程如何添加条件? 报错-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

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

优选2 2020-06-04 18:05:12 59

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写成链式结构吗?

如果可以,该怎么写?

感谢回复的大佬

分享到
取消 提交回答
全部回答(1)
  • 优选2
    2020-06-05 13:05:34

    参考如下代码:

    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() {

                }
            });

    0 0
云计算
使用钉钉扫一扫加入圈子
+ 订阅

时时分享云计算技术内容,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。

推荐文章