观察到fromIterable只返回一个项目

问题描述 投票:0回答:2

我observable.fromIterable只是返回1次。

我试图返回喜欢观察对象的元素列表。对于我使用“fromIterable”。 topMoviesRated.getResults()被返回20个对象,doOnNext正在呼入的20倍,但该方法getResultFromNetwork只是返回第一元件。

主持人:

public void loadData(boolean error) {
    subscription = model.result(error)
    .subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread())
    .subscribeWith(new DisposableObserver<MyFilm>() {
        @Override
        public void onNext(MyFilm object) {
            if(view!=null){
                view.updateData(object);
            }
        }

        @Override
        public void onError(Throwable e) {
            e.printStackTrace();
            if(view!=null){
                view.showSnackbar("Error...");
            }
        }

        @Override
        public void onComplete() {
            if(view!=null){
                view.showSnackbar("Finished...");
            }
        }
    });
}

模型:

public Observable<MyFilm> result(boolean error) {
    if (error)
        repository.setPagination(1);
    else
        repository.setPagination(++pagination);

    return Observable.zip(repository.getResultFromNetwork(), detailResult(),  new BiFunction<Result, Details, MyFilm>() {
                @Override
                public MyFilm apply(Result result, Details details) {
                    return new MyFilm(result.getOriginalName(), result.getId().toString(), details);
                }
            });
}

public Observable<Details> detailResult() {
    return Observable.zip(repository.getDetailsData(), repository.getCountryData(), new BiFunction<TVDetails, String, Details>() {
        @Override
        public Details apply(TVDetails tvDetails, String country) {
            return new Details(tvDetails, country);
        }
    });
}

库:

public Observable<Result> getResultFromNetwork() {
    Observable<TopMoviesRated> topMoviesRatedObservable = moviesApiService.getTopMovies("es_ES", pagination);
    return topMoviesRatedObservable.concatMap(new Function<TopMoviesRated, Observable<Result>>() {
        @Override
        public Observable<Result> apply(TopMoviesRated topMoviesRated) {
            return Observable.fromIterable(topMoviesRated.getResults());
        }
    }).doOnNext(new Consumer<Result>() { 
        @Override
        public void accept(Result result) {
            Log.d("OnNext -->", result.toString());
        }
    });
}
android observable rx-java iterable
2个回答
1
投票

看看这个图片。第一个列表有5个项目,仅次于4正如你看到的,压缩操作的结果只包含4 items.zip operator


0
投票

Yamko是正确的,zip是不是你所需要的。尝试改用它Observable.combineLatest

© www.soinside.com 2019 - 2024. All rights reserved.