【问题标题】:How to pass custom pojo as parameter to the interface method call in rxjava2 Observable?如何将自定义pojo作为参数传递给rxjava2 Observable中的接口方法调用?
【发布时间】:2017-09-14 08:55:06
【问题描述】:

当前代码

    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) {

        }
    });

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

Observable.from(listMovie)
                .flatMap(new Func1<Movie, Observable<FavMovieRes>>() {
                    @Override
                    public Observable<FavMovieRes> call(Movie movie) {
                        return moviesAPI.makeMovieFav(String.valueOf(SharedPreferenceDataManager.getUserId(SyncFavListPeriodicTask.this)), SharedPreferenceDataManager.getSessionId(SyncFavListPeriodicTask.this), new MakeMovieFav("movie", movie.getId(), movie.isFavList()));
                    }
                }).subscribe(new Subscriber<FavMovieRes>() {
            @Override
            public void onCompleted() {

            }

            @Override
            public void onError(Throwable e,Movie movie) {//or MakeMovieFav makeMovieFav

            }

            @Override
            public void onNext(FavMovieRes favMovieRes,Movie movie) {//or MakeMovieFav makeMovieFav

            }
        });

【问题讨论】:

    标签: android rx-java retrofit2 rx-android


    【解决方案1】:

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

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

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

    您需要为您的平面图创建一个 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")
                );
    

    【讨论】:

    • 不,我已经实现了我想获取我处理的数据而不是处理后的数据。在这种情况下,我希望在方法调用(结果结果)中调用每个 Result 对象并调用(Throwable throwable,Result 结果)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-03
    • 2010-10-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多