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();
}
})
这种是简单的request1和request2链式,1请求之后到2
现在有一个奇特的需求,有1、2、3三个http请求,请求顺序是:
首先请求1,
如果1的返回结果不符合标准,那么就请求2,然后2再请求3
如果1的返回结果符合标准,直接请求3
也就是说1和3一定请求,中间的2根据条件判断可能会跳过,这种能通过Retrofit+Rxjava写成链式结构吗?
如果可以,该怎么写?
感谢回复的大佬
参考如下代码:
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() {
}
});
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。