gpt4 book ai didi

android - 来自多个改造请求的 Observable

转载 作者:行者123 更新时间:2023-11-29 16:34:35 25 4
gpt4 key购买 nike

我从改造请求中得到了 Flowable。我需要从多个请求中获取一个对象,例如 Observable> 在 while 构造中:

public static Observable<List<CurrencyStamp>> getStampByDay(String symbol, Date date, String... convertsSymbols){
long count = 0;

Observable<List<CurrencyStamp>> result = null;
while (count < secByDay){
Flowable<CurrencyStamp> item = CoinApi.getCompareApi().getCurrencyHistory(symbol, date.getTime() - count,
convertsSymbols).subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());


count += secByFiveMin;
}


return result;
}

我需要哪些运算符?

最佳答案

我将在这里建立 Maximm Volgin 的答案。 (谢谢)

我相信您有多个可观察流要合并到项目列表中。我将把它分成两部分。

  1. 将流合并为一个。这可以根据顺序/行为使用 zip、merge 或 flatMap 运算符来完成 Zip Doc Merge Doc FlatMap .

  2. 将数据从单个项目转换为列表。这可以通过 toList() 来完成

我还建议不要将 flowables/Observables 用于 Retrofit 调用,而是使用 Singles。

代码最终会看起来像这样:

Kotlin :

fun example(): Single<List<CurrencyStamp >> {
val count = secByDay.div(secByFiveMin)
return Observable
.range(0, count)
.flatMapSingle { curr ->
// This should be giving you back a Single
CoinApi.getCompareApi().getCurrencyHistory(symbol,
date.getTime() - curr.mul(secByFiveMin),
convertsSymbols)
}.toList()
}

Java:

    Single<List<CurrencyStamp>> sample() {
val count = secByDay / secByFiveMin;
return Observable
.range(0, count)
.flatMapSingle((Function<Integer, SingleSource<String>>) curr ->
// This should be giving you back a Single
CoinApi.getCompareApi().getCurrencyHistory(symbol,
date.getTime() - (curr * secByFiveMin),
convertsSymbols))
.toList();
}

** 编辑:您还应该处理可能有错误的流中的错误(如网络调用)查看这篇讨论它的媒体文章 Error handling article

关于android - 来自多个改造请求的 Observable<List<SomeItems>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52817656/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com