2017-11-16 3 views
1

Also habe ich folgende Einweg, die nicht funktioniert. Ich verwende Room, um alle Zeilen aus einer Tabelle als Liste zu erhalten, jede von ihnen auf etwas zuzuordnen und eine Liste zu erstellen, und von dort wird es nicht fortgesetzt.RxJava2 toList() gibt nie

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

Warum brauchen Sie '.toObservable()'? – Benjamin

+0

Da dies in einem anderen Stream ist, der die Zeichenfolge etc .. aus dem ui erhält und überprüfen, ob es erforderlich ist, um Vorschläge zu speichern oder das Netzwerk zu treffen. Aber auch tue ich nicht zu observservable() es emittiert immer noch nicht nach toList(). Es ist eine Single an diesem Punkt, also sollte es etwas zurückgeben onSuccess() –

Antwort

2

sein sollte in der Regel unendlich Quellen aber toList() erfordert eine endliche Quelle. Ich nehme an, du wolltest diese Sammlung von storedSuggestions verarbeiten und zusammenhalten. Sie können dies über eine innere Transformation erreichen:

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

So funktioniert das :) Zimmer bot einen unendlichen Datenstrom (wenn Änderungen in der Datenbank passiert, können Sie sie bekommen) und dies verursachte dieses Problem als ich bin "ended" von endlichen Streams (dh Netzwerkanrufe etc.) –

0

Ich denke, in Ihrem Fall müssen Sie .toObserable nicht() aufrufen

es so aus 3. Parteien Diese Arten von Datenquellen

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();