2017-03-25 25 views
0

希望这个问题不是太高级别。 我正在使用连接到Spotify Web API(使用Retrofit)的Android应用程序,最终结果是从其他API调用收集的数据生成的轨道列表,例如用户顶级轨道,顶级艺术家等...因为最终的结果,我需要从几个不同的API调用我担心构建的逻辑有点乱,此刻它本质:从多个RESTful源创建复合数据列表的方法

getFirstBitofRequiredData -> onDataReady -> getNextBitofData ->  OnDataReady -> getMoreData(combinedDataSets) -> onDataReady -> createDataModelObjectsForView(moreCombinedDataSets) 

某事反正效果!我想知道是否有任何特定的架构方法来实现这种获取数据的顺序和组合方法?

由于提前,

加里

+1

检查RxJava2。将所有这些回调放在一个流利的API中变得非常简单。 – Budius

+0

我实际上使用RxAndroid适配器进行Retrofit作为Observable返回,但也许我在这方面利用不足。我会再从另一个角度再看看他们的API,看看我是否弄明白了。感谢您的推荐! –

回答

1

这不会是一个完整的答案,但会帮助你引导你更多的Rx东西。主要的一点是在Rx中,您可以按照呼叫方式执行所有这些操作。意思是,电话回拨不会在全班传播,并且很容易阅读/理解正在发生的事情。

我要输入一个伪代码,所有的核心,所以你必须真正挖掘文档,看看如何。但它应该指向你想要达到的例子。

Data1 d1; 
Data2 d2; 
Data3 d3; 

retrofit.getData1(param) // the retrofit observable 
     .flatMap(new Function<Data1, ObservableSource<Data2>() { 
      @Override 
      public Observable<Data2> call(Data1 data1){ 
        d1 = data1; 
        return retrofit.getData2(data1.val); 
      } 
     }); 
     .flatMap(new Function<Data2, ObservableSource<Data3>() { 
      @Override 
      public Observable<Data3> call(Data2 data2){ 
        d2 = data2; 
        return retrofit.getData3(data2.val); 
      } 
     }) 
     .observeOn(... UI thread) 
     .subscribe(... 
       ... now you have all the data here ... 
+0

啊,这很好理解,看起来像一个非常可读和简洁的方式来排序他们发生。今天我会放弃一下,准备选择combineLatest的一些用法,但我认为这对情况更有意义。非常感谢! –