Rxjava 判断多个Observable返回值相同的响应顺序。

2016-10-10  本文已影响0人  markzhen

最近有个需求,判断三个Observable哪一个最先返回(最要是测试3个地址的网络返回速度),本来很简单的需求使用merge或amb这样的其中一个方法就能判断哪个地址最先返回,但有点郁闷的就是这三个地址返回值是一样的,所以用上面的方法不能实现判断哪个Observable最先返回,下面是后来实现的代码:

ss_GetUsed_SITE= Observable.combineLatest(

GetRetrofit.getRetrofit(B64.dec(SITE1)).create(ImeiService.class).getSITE1().startWith("begin"),

GetRetrofit.getRetrofit(B64.dec(SITE2)).create(ImeiService.class).getSITE2().startWith("begin"),

GetRetrofit.getRetrofit(B64.dec(SITE3)).create(ImeiService.class).getSITE3().startWith("begin"),

newFunc3() {

@Override

publicString call(String s, String s2, String s3) {

if(s.equals("ok"))

{

returnB64.dec(SITE1);

}

else if(s2.equals("ok"))

{

returnB64.dec(SITE2);

}

else if(s3.equals("ok"))

{

returnB64.dec(SITE3);

}

return null;

}

})

.subscribeOn(Schedulers.io())

.subscribe(newObserver() {

@Override

public voidonCompleted() {

}

@Override

public voidonError(Throwable e) {

}

@Override

public voidonNext(String s) {

if(s !=null)

{

if(ss_GetUsed_SITE!=null)

{

ss_GetUsed_SITE.unsubscribe();

}

if(onlineWebSite==null)

{

onlineWebSite= s;

}

seachByIMEI(null);

}

}

});

现在看到了,使用的是combineLatest方法,由于combineLatest方法第一次回调需要三个Observable全有返回值才能产生,所以每个Observable都加入了一个startwith方法用来产生回调,之后通过Fun中的参数值就能判断哪个Observable最先返回。

上一篇下一篇

猜你喜欢

热点阅读