Android Room引发错误:删除方法必须返回void或返回int(已删除的行数)

时间:2019-01-01 21:05:58

标签: android rx-java2 android-room

我正在将Android Room与RxJava一起使用

dependencies {
    implementation 'androidx.room:room-rxjava2:2.1.0-alpha02'
}

我需要从参数化删除方法中获取Completable,我认为此功能从2.1.0开始添加?例如。

  @Query("DELETE FROM message_table WHERE uid = :id")
  Completable delete(String id);

  @Query("DELETE FROM message_table")
  Completable deleteAll();

仍然抛出错误:Deletion methods must either return void or return int (the number of deleted rows).

2 个答案:

答案 0 :(得分:2)

错误消息试图告诉您:

使用@Query,您必须将返回的数据类型从Completable更改为intvoid

Completable需要订阅另一种方法,该方法运行Dao的方法:

Completable
  .fromAction(aMethodWhichCallsDao)
  .subscribeOn(Schedulers.single())
  .subscribe();

或按照@Commonsware的建议使用@Delete注释(以防广告宣传)。

答案 1 :(得分:1)

我不知道您是否需要它,但是今天就进入同一件事,发现您需要使用所有这三个库来创建DAO方法以返回Completable:

implementation 'androidx.room:room-runtime:2.2.1'
kapt 'androidx.room:room-compiler:2.2.1'
implementation 'androidx.room:room-rxjava2:2.2.1'

我希望这会对您有所帮助。