如何解决RxJava Flowable.zip 从不返回值
我的存储库中有一个代码,它必须调用两个端点。我使用过 Flowable.zip() 但它似乎没有返回值。即使没有可用网络,呼叫也不会失败。
fun fetchRateRemote(): Flowable<ResultWrapper<List<RateModel>>> {
return Flowable.zip<Flowable<CurrenciesDTO>,Flowable<RateDTO>,ResultWrapper<List<RateModel>>>(
{
apiEndpoints.fetchCurrencies(key)
},{
apiEndpoints.fetchRate(key)
},{ t1,t2 ->
val rateList = mutableListOf<RateModel>()
t2.subscribe { rate->
for((k,v) in rate.quotes ){
val currency = k.removeRange(0,3)
t1.subscribe {cur->
val currencyName = cur.currencies[currency]
if (currencyName != null) {
rateList.add(RateModel("$currencyName ($currency)",v.toString()))
}
}
}
}
ResultWrapper.Success(rateList)
}).subscribeOn(Schedulers.io())
}
我使用包装器来模拟状态,这就是我在视图模型中所做的。
private fun fetchRates(){
disposable.add(repository.fetchRateRemote()
.startWith(ResultWrapper.Loading)
.onErrorReturn {
ResultWrapper.Error(it)
}
.observeOn(AndroidSchedulers.mainThread())
.subscribeWith(object : DisposableSubscriber<ResultWrapper<List<RateModel>>>() {
override fun onComplete() {}
override fun onNext(rate: ResultWrapper<List<RateModel>>) {
rates.postValue(rate)
}
override fun onError(error: Throwable) {
error.printStackTrace()
}
})
)
}
然后我通过 LiveData 观察我的活动率。包装或观察不是问题。它适用于其他调用,我不知道为什么 zip 调用不起作用。我对 RxJava 还很陌生,所以如果我没有在我的存储库中正确实现某些东西,请帮助纠正我。
解决方法
好的!我对上面存储库中的代码犯了很多错误,但我设法修复了它。这是解决方案。 zip 方法的 Type 参数是错误的!我也没有正确调用 BiFunction 参数。
fun fetchRateRemote(): Flowable<ResultWrapper<List<RateModel>>> {
return Flowable.zip<CurrenciesDTO,RateDTO,ResultWrapper<List<RateModel>>>(
apiEndpoints.fetchCurrencies(key),apiEndpoints.fetchRate(key),BiFunction { t1,t2 ->
val rateList = mutableListOf<RateModel>()
for((k,v) in t2.quotes ){
val currencyCode = k.removeRange(0,3)
val currencyName = t1.currencies[currencyCode]
if (currencyName != null) {
rateList.add(RateModel("$currencyName ($currencyCode)",v.toString()))
}
}
ResultWrapper.Success(rateList)
}).subscribeOn(Schedulers.io())
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。