我在项目中将 RxJava3 与 Room 一起使用,但出现以下错误
错误:不确定如何将游标转换为此方法的返回类型 (io.reactivex.rxjava3.core.Flowable>(
下面是我收到错误的DAO接口方法
@Query("SELECT * FROM wishlist_table")
Flowable<List<WishListMovie>> getWishList();
我想可能是因为我在我的成绩文件中使用了下面的依赖项:
implementation "androidx.room:room-rxjava2:$room_version"
我试图找到上述RxJava 3的依赖项,但找不到它。
我想知道如何将 RxJava 3 与 Room 一起使用,或者我应该在我的项目中使用 RxJava 2。
2020 年 7 月 22 日
在房间2.3.0-alpha02中添加了对RxJava3类型的支持。 虽然它仍处于 alpha 阶段,但您可以考虑此选项。
根据发布说明:
与 RxJava2 类似,您可以声明返回类型 可流动、单一、可能和可组合.
此外,还有一个新工件androidx.room:room-rxjava3
可用于支持 RxJava3
问题
我想知道如何将 RxJava 3 与 Room 一起使用,或者我应该在我的项目中使用 RxJava 2。
结果
您不能将 RxJava3 与 Room "room-rxjava2" 依赖项一起使用。
解释
RxJava2 和 RxJava3 是不同的。为了避免运行时错误(例如在链接期间(,RxJava3选择了不同的包。这就是返回的类型不匹配的原因(不同的包(
溶液
在有room-rxjava3软件包之前,你必须使用RxJava2作为依赖项。
解决方法
您可以签出room-rxjava2并更改rxjava3的所有软件包并编译aginst rxjava3,然后使用此软件包。
当前正在更新项目并遇到相同的问题。
我正在使用room-rxjava2来生成带有RxJava2类型的DAO(像以前一样(。 但是对于我的业务逻辑,我正在使用 https://github.com/akarnokd/RxJavaBridge 转换为 RxJava3 类型。
另一种解决方案是不在 Dao 上使用反应式类型,而是在存储库中有一个反应式包装器