簡體   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