2017-03-25 9 views
0

この質問は高すぎるとは限りません。 私はSpotify Web API(Retrofitを使用して)に接続する瞬間にAndroidアプリケーションを開発しています。最終結果は、他のAPI呼び出しから収集されたデータから生成されたトラックのリストです。例えば、トップアーティスト等...私は必要な最終的な結果は、私に関するいくつかの異なるAPI呼び出しから構成されているので、ロジックが、それは本質的だ瞬間に、少し厄介です:とにかくその旨を複数のRESTfulソースから複合データリストを作成するアプローチ

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

何か!私は、この種のシーケンシャルおよびコンビネーションのデータを取得する方法を実装するための具体的なアーキテクチャ上のアプローチがあるのだろうかと思っていましたか?完全な答えであるつもりはないですが、あなたはRxのものでより多くのご案内役立つはず事前に

おかげで、

ギャリー

+1

RxJava2を確認してください。すべてのコールバックを1つの流暢なAPIに入れるのは非常に簡単です。 – Budius

+0

実際にRetrofit用のRxAndroidアダプタをObservablesとして返品していますが、おそらく私はその前でそれらを過小評価していますか?より高いレベルのAPIをもう一度見て、それを把握するかどうかを見ていきます。推薦してくれてありがとう! –

答えて

1

。要点は、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のいくつかの使用法を選択するつもりだったが、これは状況のためのより理にかなっていると思う。どうもありがとう! –

関連する問題