如何将自定义pojo作为参数传递给rxjava2 Observable中的接口方法调用?

时间:2017-09-14 08:55:07

标签: android rx-java retrofit2 rx-android

当前代码

dice

在上面的代码中,我将Movie对象列表传递给Observable并在结果从API获取时对列表中的每个影片实例执行操作我想要更改关于该影片实例的某些数据库如何在OnNext中获取每个Movie实例()以及subscribe方法的onError方法。 我想要的是

    Observable.from(listMovie)//list of movie
            .flatMap(new Func1<Movie, Observable<FavMovieRes>>() {
                @Override
                public Observable<FavMovieRes> call(Movie movie) {
                    return moviesAPI.makeMovieFav(userId),
                    sessionId, new MakeMovieFav("movie", movie.getId(), movie.isFavList()));
                }
            })
            .subscribe(new Subscriber<FavMovieRes>() {
        @Override
        public void onCompleted() {

        }

        @Override
        public void onError(Throwable e) {

        }

        @Override
        public void onNext(FavMovieRes favMovieRes) {

        }
    });

1 个答案:

答案 0 :(得分:0)

我猜你有一个List,想要处理每个收到的项目以进行另一次异步操作。在这种情况下,您可以对每个结果进行平面映射。

flatMapIterable表示它会将列表中的每个项目作为Observable分割为您的Stream中的下一个操作。 flatMap表示它将对收到的值进行操作。

如果要将结果重新组合在一起,可以在flatMap之后使用toList

您需要为 flatmap 创建一个Observable(操作)。

<强>科特林:

Observable.just(data)
        .flatMapIterable { it }
        .flatMap{ moviesAPI.makeMovieFavObservable(whatEver) }
        .subscribe( ... , ... , ... )

Java(未经测试)

Observable.just(data)
            //parse each item in the list and return it as observable
            .flatMapIterable(d -> d) 
            // use each item and to another observable operation
            .flatMap(data -> Observable.just(moviesAPI.movieStuff(data)))                         
            // use each result and put it back into a list
            .toList() // put the result back to a list
            // subscribe it and log the result with Tag data, throw the error and output when completed
            .subscribe( data -> Log.d("Data", "Data received "+ data), 
                        error -> error.printStackTrace(), 
                        () -> Log.d("Completed", "Completed")
            );