【问题标题】:RxJava 3 support for RoomRxJava 3 对 Room 的支持
【发布时间】:2020-06-14 11:05:08
【问题描述】:

我在我的项目中使用带有 Room 的 RxJava3,但出现以下错误

错误:不确定如何将 Cursor 转换为此方法的返回类型 (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。

【问题讨论】:

    标签: android rx-java android-room rx-java3


    【解决方案1】:

    2020 年 7 月 22 日

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

    根据发布说明:

    与 RxJava2 类似,您可以声明返回类型为 Flowable、Single、Maybe 和 Completable。
    另外一个新神器 androidx.room:room-rxjava3 可用于支持 RxJava3

    【讨论】:

      【解决方案2】:

      问题

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

      结果

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

      说明

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

      解决方案

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

      解决方法

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

      【讨论】:

        【解决方案3】:

        目前正在更新一个项目,遇到同样的问题。

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

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-12-17
            • 1970-01-01
            • 1970-01-01
            • 2016-04-15
            • 2012-09-20
            • 1970-01-01
            相关资源
            最近更新 更多