我遇到了rx java的问题。
我有一个当前流,在某些时候给我一个Either
该响应具有外部资源,如图像网址,我想将每个网址发送到外部类,异步下载,如果所有这些都没问题,请继续接收或者如果其中一个资源发生故障,正在下载的是返回Either.error(MyError());
我的问题是,当我在资源提供者中创建一个新的observable时,需要订阅开始运行,但我不知道该怎么做。
这是我目前的代码(不确定是否编译,但你明白了):
private Observable<Either<Error, Response>> prefetchResourcesOrError(final Either<Error, Response> errorOrResponse) {
if (errorOrResponse.isResponseWithImages()) {
ResponseImages responseImages = (ResponseImages) responseImages.getResponse();
return
Observable.fromIterable(responseImages.getResources()
.map(resourcesProvider::prefetch)
.onErrorReturn(throwable -> Observable.<Either<Error, Response>>just(Either.left(new MyError())))
.map(observable -> errorOrResponse);
} else {
return Observable.just(errorOrResponse);
}
}
//Resource prefetch method
Observable prefetch(Resource resource) {
return Observable.just(resource)
.flatMap((Function<Resource, ObservableSource<?>>) res1 ->
Observable.create((ObservableOnSubscribe<Void>) emitter ->
resourceLoader.prefetch(res1.getUrl(), new ImageLoaderListenerAdapter() {
@Override
public void onException(Exception e) {
emitter.onError(e);
}
@Override
public void onResourceReady() {
emitter.onNext(null);
}
})
)
);
}
}
//The main Stream
//MainObservable is an Either<Error, Response> errorOrResponse
return mainObservable.flatMap(this::prefetchResourcesOrError);