如何追随:
Observable<Data> obs = ...;
List<Data> data = obs
.toList()
.toObservable()
.singleOrError() // <= this line throws the exception
.blockingGet();
我的代码有时会抛出java.lang.IllegalArgumentException: Sequence contains more than one element!
。难道我不总是在我的情况下获得单个List<Data>
元素(或null)但从不多个元素?
答案 0 :(得分:1)
由于toList
在RxJava2中返回Single
,因此异常应该是不可能的。所以它可能是由上游没有正确实现Rx协议的东西造成的。
我建议在doOnNext
和toObservable
之间添加singleOrError
日志记录调用,以了解这种潜在的第二次排放是什么。
答案 1 :(得分:0)
我很好奇,你为什么要使用.toList()
,其中返回是一个Single,然后将其更改为一个observable,只是为了检查它是单个还是出错?
为什么不这样做:
Observable<Data> obs = ...;
List<Data> data = obs
.toList()
.blockingGet();
P.S:我知道我的回答可能是错的。如果是这样的话,请纠正我,但我想发布它,因为评论不允许正确格式化。
答案 2 :(得分:0)
您应该使用 .firstOrError
bcos .singleOrError
不期望来自上游的新项目。并且失败了。特别是如果您在那里有列表。