android - 将 API 调用与 RX Java 相结合

标签 android rx-java

我是 RXJava 的新手,我无法理解如何将 API 调用的结果链接在一起。

我正在使用 retrofit A 和 B 进行两个 API 调用,它们都返回一个可观察的对象列表。两个 API 调用都是独立的,所以我想同时进行,但要获得最终结果,我需要先获取 A 的结果,做一些工作,然后将其与 B 的结果结合起来填充我的列表适配器.

  • 进行 API 调用 A
  • 调用 API B
  • 取A的结果并创建结果X
  • 获取 B + X 的结果并填充适配器

    @GET("/{object_id}/object_a")
        Observable<List<Object_A>> getObjectAList(
            @Path("object_id") long object_id);
    
    
    @GET("/{object_id}/object_b")
        Observable<List<Object_B>> getObjectBList(
            @Path("object_id") long object_id);
    

这是我在尝试使用 RX java 时迷路的地方。我可以获取 api 调用 A 的结果并完成我的工作 但我不确定如何获取我刚刚生成的结果并将其与 API 调用 B 结合。

aService. getObjectAList(object_a.getID())
            .subscribeOn(AndroidSchedulers.mainThread())
            .observeOn(AndroidSchedulers.main)
            .subscribe(new Action1<List<Object_A>>() {

                @Override
                public void call(List<Section> sections) {
                    // Do Stuff Here...
                    // Now i need to take this result and combine it with API Call B...
                }
            });

我想同时进行两个 API 调用,但我不确定如何链接在一起并组合 API 调用。任何帮助都是感激的。

最佳答案

是这样的吗?

Observable
        // make api call for A list and B list
        .combineLatest(getObjectAList(), getObjectBList(), new Func2<List<Object_A>, List<Object_B>, Object>() {
            @Override
            public Object call(List<Object_A> o, List<Object_B> o2) {
                // Do what you need to do in the background thread
                List x = createX(o);
                List y = createY(x, o2);
                return y;
            }
        })
        .subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe(new Observer<Object>() {
            @Override
            public void onCompleted() {

            }

            @Override
            public void onError(Throwable e) {

            }

            @Override
            public void onNext(Object y) {
                // UI thread, do what you need e.g. renders the list
                mAdapter.setList(y);
            }
        });

注意替换正确的类型应该会让您非常接近解决方案。

关于android - 将 API 调用与 RX Java 相结合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26846677/

相关文章:

安卓-java.io.IOException : Canceled when disposed

android - 将文件名从 SimpleCursorAdapter 返回到 Activity

android - 检查复选框 nullPointerException

android - AWS Cognito - 社交登录选项行为

android - RXKotlin 在 doOnNext 内部中断并调用另一个函数

javafx - 是否可以将马里奥示例从 Elm 转换为纯 JavaFX 或 JavaFX+RxJava,同时保留 Elm 的高级抽象?

java - 无法解析为变量 - Parse.com

android - 如何确定Android中的 "top"Activity

java - 将 Observables 收集到列表似乎不会立即发出集合

java - 将 Swing 事件可观察量与其他可观察量相结合