gpt4 book ai didi

android - 使用 RxJava 从 2 个可观察对象中获取一个结果

转载 作者:搜寻专家 更新时间:2023-11-01 08:31:07 25 4
gpt4 key购买 nike

我是 RxJava 的新手,在执行我的第一个“困难”查询时有些痛苦。

我有两个从 Retrofit 生成的 Observable,一个“ping”一个新的 api,另一个是旧的。第一个将查询' http://myurl.com/newapi/ping ',第二个' http://myurl.com/oldapi/ping '.这个请求的结果并不重要,我只想知道服务器使用的是新的还是旧的 api。

所以我想同时调用两个 observables,最后有一个 bool 值来知道我使用的是旧的还是新的 api。

我试过类似的东西

Observable.mergeDelayError(obsOldApi,obsNewApi)
.observeOn(AndroidSchedulers.mainThread(), true)
.subscribeOn(Schedulers.io())
.subscribe(new Subscriber<String>() {
@Override
public void onCompleted() {
}

@Override
public void onError(Throwable e) {
}

@Override
public void onNext(String s) {
}
});

但是 onError 将被调用一次(我希望只有在两个请求都失败时才调用它)并且当 onNext 被调用时,我不知道它来自哪个请求(旧的还是新的 api?)。

谢谢你的帮助

最佳答案

为简单起见,假设您将收到关于哪个 api 可用的 “NEW”“OLD”

操作的难点在于管理错误:RxJava 将错误作为终端状态处理。因此,您必须忽略此错误,例如使用 .onErrorResumeNext()

   Observable<String> theOld = oldApi.map(r -> "OLD")
// ignore errors
.onErrorResumeNext(Obervable.empty());

Observable<String> theNew = newApi.map(r -> "NEW")
.onErrorResumeNext(Obervable.empty());


Observable.merge(theOld, theNew)
.first() // if both api are in errors
.subscribe(api -> System.out.println("Available API : "+api));

我添加了运算符 first :它将只接受第一个结果(“OLD”“NEW”)但会触发错误如果前面的 Observable 为空,即两个 API 都不可用的情况。

关于android - 使用 RxJava 从 2 个可观察对象中获取一个结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40767228/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com