无法在Room dao界面中使用Completable

时间:2018-12-03 15:30:04

标签: kotlin rx-java android-room

我试图在Completable注释方法的Dao类中使用@Insert,但是在尝试编译项目时,出现了以下错误:

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支持。

4 个答案:

答案 0 :(得分:6)

  

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

将您的房间从1.1.1更新到2.1.0或更高,这样就可以了。

答案 1 :(得分:2)

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

确保使用这些依赖项,而不是常规的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依赖项。

答案 2 :(得分:0)

如果您不想更新会议室的版本,可以尝试像这样获得可退还的款项:

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

答案 3 :(得分:0)

以上对我不起作用,这是我在 oder 中使用的修复方法

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"