2
我是RxJava(特別是RxJava2)的新手,我似乎是一個相對容易操作的問題。我需要從數據庫獲取一些數據,遍歷數據(它被表示爲一個列表),對每個項目執行操作,將數據包裝到另一個對象中並返回。這是我迄今爲止:RxJava在列表上執行操作並返回一個可觀察值
mDataManager
.getStuffList(id)
.flatMapIterable(listOfStuff -> listOfStuff)
.flatMap(item ->
mDataManager
.performCount(id, item.getTitle())
.doOnNext(item::setCounter)
.takeLast(1)
.map(counter -> item))
.toList()
.toObservable()
.flatMap(listOfStuff -> Observable.just(new StuffWrapper(listOfStuff));
我遇到的問題是,我的數據管理器調用永遠不會完成。這個想法是,每當底層數據發生變化時,UI也會改變。但是,如果沒有完成這些調用,toList()將不會發出事件。
是的,我使用'SqlBrite',它是一個Rx包裝器,圍繞着Android SQLite幫助器類,它提供了數據更改時間的通知。但是,如果我正確理解自己的代碼,toList()將阻止我在第一個之後接收這些通知?或者我錯過了什麼?是的,我正在使用RxJava2 – vkislicins
好吧,如果您需要多次調用mDataManager.getStuffList(每次數據更改時都會調用一次),那麼您需要包裝所有內容。如果OTOH的'getStuffList'調用在數據庫中的東西發生變化時返回一組完整的項目,那麼你應該跳過'flatMapIterable'並且嵌套在flatMap中的所有東西。 –
你能提供一個後者的例子嗎?我不確定你的意思 – vkislicins