Room Rxjava Single作为删除响应

时间:2018-11-26 11:36:06

标签: android android-room

我遇到了一些有关Room Library编译时错误的问题。

我正在使用版本:2.1.0-alpha02

以下原因导致错误:

@Dao()
public interface WorkoutExerciseDao {

    [......]
    @Update()
    Single<Integer> updateWorkout(final WorkoutExercise... workoutExercises);


    @Delete
    Single<Integer> deleteWorkouts(final WorkoutExercise... user);

    @Query("DELETE FROM workout_exercise_table WHERE id  IN(:exerciseIds)")
    Single<Integer> deleteWorkouts(final long... exerciseIds);
}

当前,第一个带@Delete注释的方法可以正常编译并按预期工作。如果我添加第二个(在查询方法中删除),则会因错误而中断编译:

  

删除方法必须返回void或返回int(   删除的行)。

我在这里想念什么吗?

3 个答案:

答案 0 :(得分:5)

您说得对,我遇到了这个问题。我不知道原因,但我知道最新版本的房间无法解决此问题,当您对DELETE使用查询时,它说返回类型必须为空或整数,但是如果要使用{ {1}}用于RX查询,您可以这样做,但可能不是最好的方法: 首先将DELETE转换为interface,然后将所有方法转换为abstract class,然后

abstract method

答案 1 :(得分:0)

@Query("DELETE FROM yourDB")
void delete() : Completable

答案 2 :(得分:-1)

您需要使用 AndroidX

首先将项目迁移到AndroidX,请参阅documentation,简单的方法是右键单击项目文件夹,确保它位于 projects 透视图中,右键单击该文件夹,然后单击重构,然后应该有一个选项“ 迁移到AndroidX ”。

enter image description here

将项目迁移到AndroidX之后,您现在可以在应用程序级别gradle中添加AndroidX依赖项。

implementation "androidx.room:room-runtime:$room_version"
annotationProcessor "androidx.room:room-compiler:$room_version" // kapt for Kotlin
// optional - RxJava support for Room
implementation "androidx.room:room-rxjava2:$room_version"

有关添加Room的最新版本依赖性,请参见documentation