[英]RXAndroid: get List objects from the difficult List
我已经尝试了很长时间才能在Android上执行此代码,但是在这里找不到答案。 我是初学者,请理解我。 我使用Retrofit2和RXJava发出多个请求
答案是JSON(数组),它是Java中的CurrencyData
类
[
{
"r030":978,"txt":"euro","rate":11.11111,"cc":"EUR","exchangedate":"25.09.2018"
}
]
MyAPI接口
@GET("/BankService/v1/statdirectory/exchange")
Observable<List<CurrencyData>> getCurrencyCodeDate(@Query("valcode") String valCode, @Query("date") String date);
收集请求
List<Observable<List<CurrencyData>>> requests = new ArrayList<>();
requests.add(myApi.getCurrencyCodeDate("USD","20180928"));
requests.add(myApi.getCurrencyCodeDate("EUR","20180928"));
执行请求
Observable
.zip(requests, Arrays::asList)
.toList()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
我有
[[CurrencyData{txt='Dollar USA', rate='1.111'}], [CurrencyData{txt='EURO', rate='2.222'}]]
我对如何获取具有所有CurrencyData
对象的List<CurrencyData>
感兴趣。
我尝试使用map
和flatMap
但它不起作用。 我将非常感谢。 谢谢。
问题:您的getCurrencyCodeDate
方法返回List<CurrencyData>
Observable
,并且您正在将Observable.zip()
拉链函数用作Arrays::asList
来使用它。
发生的是,您的getCurrencyCodeDate
发出一个对象List
,并且Arrays::asList
将所有发出的List
包裹在List
。 导致Observable.zip()
发出List<List<>>
。
在.toList()
运算符之上,该运算符将再次将发出的List<List<>>
包装在另一个List
从而将List<List<List<>>>
作为返回类型。
您可以做的是,使用merge
运算符代替zip
并使用collectInto
代替toList
。
Observable
.merge(requests)
.collectInto(new ArrayList<CurrencyData>(), ArrayList::addAll)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.