带有RxJava Single的Android Room <list <t>&gt;编译错误

时间:2017-09-06 05:12:04

标签: compiler-errors rx-java2 android-room

我收到了编译错误 “错误:不确定如何将Cursor转换为此方法的返回类型” 在尝试查询时

Single<List<T>> getList()

但当我将Single更改为Flowable时,一切正常。

出现这种错误的原因是什么?

1 个答案:

答案 0 :(得分:3)

是的,它提供了一个错误,因为您正在观察数据库更改。

单次发出并且仅需要 1 结果。由于它是LiveData的包装器,一旦数据发生更改就会通知它,它需要使用Flowable。即使当前没有可用数据,这也允许在Stream中获取数据。

另外请注意,在生成的类中使用泛型。这可能会导致不必要的行为。

如果你真的想把数据包装成一个你可以在你的Dao中使用

@Query("SELECT * FROM ActiveShooter") List<ActiveShooter> getAllActiveShooters(); 

并将您的结果转换为存储库中的Single。

public void Single<List<ActiveShooter>> getActiveShooterInRepo() {
     return Single.fromCallable( () -> yourDao.getAllActiveShooters()); 
}

如果你这样做,你将失去数据变化的可观察性。