2017-10-22 3 views
0

発する:私のコードは時々java.lang.IllegalArgumentException: Sequence contains more than one element!をスローRxJava - ToListメソッドと、まだ複数の項目の可能な以下れる方法

Observable<Data> obs = ...; 
List<Data> data = obs 
    .toList() 
    .toObservable() 
    .singleOrError() // <= this line throws the exception 
    .blockingGet(); 

を。私はいつも私の場合(またはnull)の単一のList<Data>要素を取得してはいけませんが、複数の要素はありませんか?

+0

「obs」とは何ですか?それはカスタム 'Observable'ですか? – akarnokd

+0

いいえ、キャッシュとデータベースクエリ(および更新)をラップしていますが、カスタムオブザーバブルなものはありません。 – prom85

+2

[プロトコルバリデータ](https://github.com/akarnokd/RxJava2Extensions#プロトコル検証)、どこで失敗するかを確認します。 – akarnokd

答えて

1

toListがRxJava2にSingleを返すという例外を除き、例外は不可能です。そのため、Rxプロトコルを適切に実装していない上流のものが原因である可能性があります。

doOnNextロギングコールをtoObservablesingleOrErrorの間に追加して、この潜在的な第2のエミッションがどのようになるかを確認することをお勧めします。

+0

これも追加して、提案されたプロトコルバリデーター – prom85

0

私は好奇心が強いのですが、返り値がシングルの場合は.toList()を使用していますが、それをオブザーバブルに変更したのはなぜですか?

Observable<Data> obs = ...; 
List<Data> data = obs 
    .toList() 
    .blockingGet(); 

P.S:

理由だけでこれをしない私は私の答えは間違っている可能性が知っています。その場合は修正してください。コメントが適切な書式設定を許可しないため、投稿したいと思っていました。

関連する問題