我遇到了一些有关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( 删除的行)。
我在这里想念什么吗?
答案 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 ”。
将项目迁移到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。