相关疑难解决方法(0)

Retrofit和RxJava:如何组合两个请求并获得对两个结果的访问权限?

我需要提出两个服务请求并将其结合起来:

ServiceA()=> [{"id":1,"name":"title"},{"id":1,"name":"title"}]

ServiceB(id)=> {"field":"value","field1":"value"}

目前,我已设法将结果组合在一起,但我需要将id参数作为参数传递给ServiceB并获取对第一个结果的访问权限.

到目前为止我尝试了什么:

   Retrofit repo = new Retrofit.Builder()
                .baseUrl("https://api.themoviedb.org/3/genre/")
                .addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
                .build();

        Observable<GenerosResponse> Genres  = repo
                .create(services.class)
                .getAllGeneros("movie","list","da0d692f7f62a1dc687580f79dc1e6a0")
                .subscribeOn(Schedulers.newThread())
                .observeOn(AndroidSchedulers.mainThread());

        Observable<ResponseMovies> Movies = repo
                .create(services.class)
                .getAllMovies("28","movies","da0d692f7f62a1dc687580f79dc1e6a0",12)
                .subscribeOn(Schedulers.newThread())
                .observeOn(AndroidSchedulers.mainThread());

        Observable<CollectionsMovies> combined = Observable.zip(Genres, Movies, new Func2<GenerosResponse, ResponseMovies, CollectionsMovies>() {
            @Override
            public CollectionsMovies call(GenerosResponse generosResponse, ResponseMovies responseMovies) {
                return new CollectionsMovies(generosResponse, responseMovies);
            }
        });

        combined.
                subscribeOn(Schedulers.newThread())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(...);
Run Code Online (Sandbox Code Playgroud)

编辑

解决方案根据@Maxim Ostrovidov的回答:

 private Observable<GenerosResponse> makeRequestToServiceA() {
        return  service.getAllGeneros("movie","list","da0d692f7f62a1dc687580f79dc1e6a0"); //some network call
    } …
Run Code Online (Sandbox Code Playgroud)

java android rx-java retrofit2

20
推荐指数
1
解决办法
1万
查看次数

标签 统计

android ×1

java ×1

retrofit2 ×1

rx-java ×1