2017-11-16 11 views
1

私はうまくいきません。私はRoomを使用してテーブルからすべての行をリストとして取得し、それぞれを何かにマップしてリストを作成し、そこから続行しません。RxJava2 toList()は決して放出しません

storedSuggestionDao 
    .getSuggestionsOrderByType() //Flowable 
    .doOnNext(storedSuggestions -> Timber.e("storedSuggestions: " + storedSuggestions)) //this work 
    .flatMapIterable(storedSuggestions -> storedSuggestions) 
    .map(Selection::create))) 
    .doOnNext(selection -> Timber.e("Selection: " + selection)) // works 
    .toList() 
    .toObservable() // nothing works after this... 
    .doOnNext(selections -> Timber.d("selections: " + selections)) 
    .map(SuggestionUiModel::create) 
    .doOnNext(suggestionUiModel -> Timber.d("suggestionUiModel: " + suggestionUiModel)) 
    .subscribe(); 
+0

なぜあなたは '.toObservable()'を使う必要がありますか? – Benjamin

+0

これはuiから文字列etc ..を取得し、提案を格納するか、ネットワークにアクセスする必要があるかどうかをチェックする別のストリームの内部にあるためです。しかし、私はtoObservable()をしていなくても、toList()の後にはまだ出力しません。それはその時点でシングルであるため、onSuccess()の中に何かを返す必要があります –

答えて

2

ようにする必要があり、サードパーティからのデータソースのこれらのタイプは、通常は無限です.toObserableを呼び出す必要はありませんあなたのケースで考えますtoList()には有限のソースが必要です。あなたはstoredSuggestionsのコレクションを処理してまとめておきたいと思っています。

storedSuggestionDao 
.getSuggestionsOrderByType() //Flowable 
.doOnNext(storedSuggestions -> Timber.e("storedSuggestions: " + storedSuggestions)) //this work 
// ------------------------------------- 
.flatMapSingle(storedSuggestions -> 
    Flowable.fromIterable(storedSuggestions) 
    .map(Selection::create) 
    .doOnNext(selection -> Timber.e("Selection: " + selection)) 
    .toList() 
) 
// ------------------------------------- 
.doOnNext(selections -> Timber.d("selections: " + selections)) 
.map(SuggestionUiModel::create) 
.doOnNext(suggestionUiModel -> Timber.d("suggestionUiModel: " + suggestionUiModel)) 
.subscribe(); 
+0

これはうまくいきます:)部屋は無限のデータストリームを提供しました(データベースで変更が発生したときに取得できます)。有限ストリーム(すなわち、ネットワークコールなど)の「USED TO」である –

0

は、私はあなたが()

は、それはこの

storedSuggestionDao 
.getSuggestionsOrderByType() //Flowable 
.doOnNext(storedSuggestions -> Timber.e("storedSuggestions: " + storedSuggestions)) //this work 
.flatMapIterable(storedSuggestions -> storedSuggestions) 
.map(Selection::create))) 
.doOnNext(selection -> Timber.e("Selection: " + selection)) // works 
.toList() // you don't have to call .toObserable() 
.map(SuggestionUiModel::create) 
.subscribe(); 
関連する問題