[英]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.