Rx java RxJava-toList并仍然发出多个项

Rx java RxJava-toList并仍然发出多个项,rx-java,rx-java2,Rx Java,Rx Java2,如何做到以下几点: Observable<Data> obs = ...; List<Data> data = obs .toList() .toObservable() .singleOrError() // <= this line throws the exception .blockingGet(); 可观测obs=。。。; 列表数据=obs 托利斯先生() .TooObservable()文件 .singleOrError

如何做到以下几点:

Observable<Data> obs = ...;
List<Data> data = obs
    .toList()
    .toObservable()
    .singleOrError() // <= this line throws the exception
    .blockingGet();
可观测obs=。。。;
列表数据=obs
托利斯先生()
.TooObservable()文件

.singleOrError()//由于在RxJava2中
toList
返回
Single
,因此不可能出现异常。因此,这可能是由于上游未正确实施Rx协议造成的


我建议在
toObservable
singleOrError
之间添加一个
doOnNext
日志调用,以查看潜在的第二次发射是什么

在RxJava2中,
toList
返回一个
Single
,因此不可能出现异常。因此,这可能是由于上游未正确实施Rx协议造成的


我建议在
toObservable
singleOrError
之间添加一个
doOnNext
日志调用,以查看潜在的第二次发射是什么

我很好奇,为什么要使用
.toList()
,其中返回值是单个的,然后将其更改为可观察的,只是为了检查它是单个的还是错误的

为什么不这样做:

Observable<Data> obs = ...;
List<Data> data = obs
    .toList()
    .blockingGet();
可观测obs=。。。;
列表数据=obs
托利斯先生()
.blockingGet();

我知道我的答案可能是错的。如果是这种情况,请纠正我,但我想发布它,因为注释不允许正确的格式。

我很好奇,为什么您要使用
.toList()
,其中返回值是单个的,然后将其更改为可观察的,只是为了检查它是单个的还是错误的

为什么不这样做:

Observable<Data> obs = ...;
List<Data> data = obs
    .toList()
    .blockingGet();
可观测obs=。。。;
列表数据=obs
托利斯先生()
.blockingGet();

我知道我的答案可能是错的。如果是这种情况,请纠正我,但我想发布它,因为注释不允许正确的格式。

您应该使用
。firstOrError
bcos
。singleOrError
不希望从上游收到新项目。而且失败了。尤其是如果您有列表的话。

您应该使用
。firstOrError
bcos
。singleOrError
不需要上游的新项目。而且失败了。特别是如果您有列表。

什么是
obs
?这是一个自定义的
可观察的
?不是。只是有很多不同的rxjava2操作符包装缓存和数据库查询(和更新),但是没有自定义的可观察的,你可以附加它,看看它在哪里失败。谢谢,我会试试这个。仅在非常罕见的情况下才会出现此错误,因此我可以使用它来找出数据库查询偶尔返回多个元素的原因。什么是
obs
?这是一个自定义的
可观察的
?不是。只是有很多不同的rxjava2操作符包装缓存和数据库查询(和更新),但是没有自定义的可观察的,你可以附加它,看看它在哪里失败。谢谢,我会试试这个。只有很少的情况下才会出现这个错误,所以我可以用它来找出原因可能是数据库查询偶尔会返回多个元素吗?我也会添加这个,并检查是否有更多的反馈,除了建议的协议验证器之外,我也会添加这个,并检查是否有更多的反馈,对建议的协议验证程序的补充