具有协程的Room DB插入回调

时间:2019-08-24 13:25:55

标签: android android-room deferred kotlin-coroutines

我正在将RoomDB与协程一起使用。我的代码如下所示-

@Dao
interface AccountDao {

    @Insert(onConflict = OnConflictStrategy.REPLACE)
    suspend fun insertAccountData(accountModel: AccountModel)

    @Query("DELETE FROM accountTable")
    suspend fun deleteAccountData()

    @Query("SELECT * FROM accountTable")
    suspend fun getAccountData(): Deferred<AccountModel>
}

//从我班上

override suspend fun retrieveAccountData(): AccountModel {
     return accountDao.getAccountData().await()
}

我如何返回或返回什么以从DAO中插入或删除,以使我知道插入或删除成功?

1 个答案:

答案 0 :(得分:0)

如果@Insert方法仅接收1个参数,则它可以返回Long,它是插入项的新rowId。如果参数是数组或集合,则应返回Long[]List<Long>

@Delete方法返回一个Int,指示从数据库中删除的行数。

因此,您的Dao应该如下所示:

@Dao
interface AccountDao {

    @Insert(onConflict = OnConflictStrategy.REPLACE)
    suspend fun insertAccountData(accountModel: AccountModel): Long

    @Delete
    suspend fun deleteAccountData(accountModel: AccountModel): Int

    @Query("SELECT * FROM accountTable")
    suspend fun getAccountData(): Deferred<AccountModel>
}