6

我在我的项目中将 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。

4

4 回答 4

8

2020 年 7 月 22 日

Room 2.3.0-alpha02中添加了对 RxJava3 类型的支持。虽然它仍处于 alpha 阶段,但您可以考虑此选项。

根据发布说明:

与 RxJava2 类似,您可以声明返回类型为 Flowable、Single、Maybe 和 Completable 的 DAO 方法。
此外,还有一个新的工件 androidx.room:room-rxjava3可用于支持 RxJava3

于 2020-07-23T22:39:06.113 回答
3

问题

我想知道如何将 RxJava 3 与 Room 一起使用,或者我应该在我的项目中使用 RxJava 2。

结果

您不能将 RxJava3 与 Room "room-rxjava2" 依赖项一起使用。

解释

RxJava2 和 RxJava3 是不同的。为了避免运行时错误(例如在链接期间),RxJava3 选择了不同的包。这就是返回的类型不匹配的原因(不同的包)

解决方案

在没有 room-rxjava3 包之前,您必须使用 RxJava2 作为依赖项。

解决方法

您可以签出 room-rxjava2 并更改 rxjava3 的所有包并编译 aginst rxjava3 然后使用此包。

于 2020-06-14T11:34:37.237 回答
2

目前正在更新项目并遇到同样的问题。

我正在使用 room-rxjava2 生成具有 RxJava2 类型的 DAO(如前所述)。但对于我的业务逻辑,我使用https://github.com/akarnokd/RxJavaBridge转换为 RxJava3 类型。

于 2020-07-20T16:40:48.273 回答
0

另一种解决方案是不在 Dao 上使用响应式类型,而是在存储库中使用响应式包装器

于 2020-09-13T15:36:48.103 回答