繁体   English   中英

RXAndroid:从困难的列表中获取列表对象

[英]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>感兴趣。

我尝试使用mapflatMap但它不起作用。 我将非常感谢。 谢谢。

问题:您的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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM