RxJava 1.x .zip()不适用于RxJava 2.0

时间:2017-06-25 04:28:02

标签: android kotlin rx-java2

我试图用RxJava + Retrofit + Kotlin学习连锁请求。 我接下来的教程是使用RxJava 1.x,所以当我尝试使用RxJava 2.x重新实现时,我无法使 .zip()工作。

这是一个使用星球大战API的简单应用,返回电影列表,每部电影都有ando,从中获取角色。

fun loadMoviesFull(): Observable<Movie> {
    return service.listMovies()
            .flatMap { filmResults -> Observable.from(filmResults.results) }
            .flatMap { film ->
                Observable.zip(
                        Observable.just(Movie(film.title, film.episodeId, ArrayList<Character>())),
                        Observable.from(film.personUrls)
                                .flatMap { personUrl ->
                                    service.loadPerson(Uri.parse(personUrl).lastPathSegment)
                                }
                                .map { person ->
                                    Character(person!!.name, person.gender)
                                }
                                .toList(),
                        { movie, characters ->
                            movie.characters.addAll(characters)
                            movie
                        })
            }
}

如果你想看到教程的整个实现,这就是链接(评论是葡萄牙语): http://www.nglauber.com.br/2017/03/rxjava-kotlin-retrofit-star-wars-api.html

我只想知道ir的语法,因为我无法在2.x上实现。

非常感谢你,我很抱歉我的英语不好。

2 个答案:

答案 0 :(得分:0)

我不知道编译器会产生什么错误但很可能你的函数应该返回Observable<List<Movie>>zip的{​​{1}}需要明确传递类型而不应该有BiFunction } 在末尾。当然最后是movie

完整代码:

.toList()

答案 1 :(得分:0)

由于声誉不足,它不会让我添加评论,因此张贴作为答案。你在使用rxkotlin吗?有许多辅助函数,包括Observable.zip(),可以帮助解决使用Rx2时的SAM模糊问题。不知道你的错误是什么,这是我能给出的最佳建议。