【问题标题】:Unable to use Completable in Room dao interface无法在 Room dao 界面中使用 Completable
【发布时间】:2018-12-03 15:30:03
【问题描述】:

我正在尝试在 @Insert 注释方法上的 Dao 类中使用 Completable,但是在尝试编译项目时,我遇到了这个错误:

error: Methods annotated with @Insert can return either void, long, Long, long[], Long[] or List<Long>.
public abstract io.reactivex.Completable insert(@org.jetbrains.annotations.NotNull()

这里是我的相关代码:

@Insert
fun insert(kanal: Kanal): Completable
@Update
fun update(kanal: Kanal): Completable
@Delete
fun delete(kanal: Kanal): Completable

还有我的依赖:

def room_version = "1.1.1"
implementation "android.arch.persistence.room:runtime:$room_version"
kapt "android.arch.persistence.room:compiler:$room_version"
implementation "android.arch.persistence.room:rxjava2:$room_version"
implementation 'io.reactivex.rxjava2:rxkotlin:2.2.0'
implementation 'io.reactivex.rxjava2:rxandroid:2.1.0'

根据link,Room 支持它。

【问题讨论】:

    标签: kotlin rx-java android-room


    【解决方案1】:

    @Insert、@Update 和 @Delete 方法:Room 2.1.0 和更高版本支持 Completable、Single 和 Maybe 类型的返回值。

    将您的房间从 1.1.1 更新到 2.1.0 或更高版本,它会起作用。

    【讨论】:

    • 但它是用于 androidx 的,我还不能使用 androidx。我可以在没有 androidx 的情况下返回 Completable 吗?
    • @DynoCris 不幸的是,所有新功能都将在androidx 中提供。 android.arch.persistence.room 的最新版本是 1.1.1。如果你想在 Room 中使用 Completable,那么你必须迁移到 androidx
    【解决方案2】:

    Completable 不适用于 1.1.1 版 Room 中的 @Insert。您必须使用仅适用于 Android X 的 2.1.0 或更高版本。

    确保使用这些依赖项而不是常规的android.arch.persistence.room

    def room_version = "2.2.0-alpha02"
    implementation "androidx.room:room-runtime:$room_version"
    kapt "androidx.room:room-compiler:$room_version" // For Java use annotationProcessor instead of kapt
    implementation "androidx.room:room-rxjava2:$room_version"
    testImplementation "androidx.room:room-testing:$room_version"
    

    这里是link,它提供了 Room 的所有 Android X 依赖项。

    【讨论】:

      【解决方案3】:

      如果您不想更新 Room 的版本,可以尝试像这样返回 Completable:

      fun insertSomthing():Completable{
       return Completable.fromAction{
             insert(kanal: Kanal)
       }.subscribeOn(Schedulers.io())
      }
      

      【讨论】:

        【解决方案4】:

        上面对我没有用,这是我用来修复它的方法

        def room_version = "2.2.6"
        implementation "androidx.room:room-runtime:$room_version"
        annotationProcessor "androidx.room:room-compiler:$room_version"
        // optional - RxJava support for Room
        implementation "androidx.room:room-rxjava2:$room_version"
        // optional - Guava support for Room, including Optional and ListenableFuture
        implementation "androidx.room:room-guava:$room_version"
        // optional - Test helpers
        testImplementation "androidx.room:room-testing:$room_version"
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-08-25
          • 2022-06-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-04-19
          相关资源
          最近更新 更多