我试图在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支持。
答案 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"