我是RXJava的新手,在理解如何将API调用的结果链接在一起方面遇到困难。

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

  • 使API调用
  • 进行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/

    10-11 19:45