【问题标题】:Approaches to creating composite data lists from multiple RESTful sources从多个 RESTful 源创建复合数据列表的方法
【发布时间】:2017-03-25 20:35:18
【问题描述】:

希望这个问题不要太高。 我目前正在开发一个连接到 Spotify Web API(使用 Retrofit)的 Android 应用程序,最终结果是从其他 API 调用收集的数据生成的曲目列表,例如用户的热门曲目、顶部艺术家等...因为我需要的最终结果是由几个不同的 API 调用构建的,所以我担心逻辑有点混乱,目前它基本上是:

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

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

提前致谢,

加里

【问题讨论】:

  • 检查 RxJava2。将所有这些回调放在 1 个流畅的 API 中非常简单。
  • 我实际上是在使用 RxAndroid 适配器进行改造以作为 Observables 返回,但也许我在这方面没有充分利用它们?我会从更高的层次再看看他们的 API,看看我是否弄明白了。谢谢推荐!

标签: android design-patterns retrofit spotify


【解决方案1】:

这不是一个完整的答案,但应该可以帮助您更多地了解 Rx 的内容。要点是使用 Rx,您可以在呼叫行中执行所有这些操作。这意味着,call-callback 不会遍布整个班级,并且很容易阅读/理解发生了什么。

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

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 ...

【讨论】:

  • 啊,这很有意义,看起来是一种非常易读且简洁的方式来对它们进行排序。今天我会试一试,我会选择使用 combineLatest,但我认为这对这种情况更有意义。非常感谢!
猜你喜欢
  • 2021-07-04
  • 2020-10-29
  • 2014-01-24
  • 1970-01-01
  • 1970-01-01
  • 2023-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多