我怎么知道@房间的插入已完成?

时间:2019-01-30 09:47:27

标签: kotlin android-room kotlinx.coroutines

  

我的情况

我使用协程和Room保存应用程序的用户个人资料数据。我具有CompleteProfileActivity:在该用户中填写他们的信息并确认(确认按钮)。我将它们发送到服务器并观察响应。如果响应成功。我将它们保存到我的ProfileDatabase中。

  

我的问题   如何得知我的数据库已更新或插入已完成,删除未通过获取大小来完成? @Insert @Delete是无效的返回方法。那么我怎么知道数据库的大小呢?

@Dao
interface ProfileDao {
@Insert(onConflict = OnConflictStrategy.IGNORE)
fun saveProfile(model:Profile)

@Query("SELECT * FROM profile_table")
fun getProfile():Deferred<Profile>
}

1 个答案:

答案 0 :(得分:3)

如果方法调用成功插入,则说明操作成功,否则将引发异常。

此外,这些也不必是返回空隙的方法。

您可以让@Insert返回表中主键的类型,该主键将成为新插入记录的键。

@Insert(onConflict = OnConflictStrategy.IGNORE)
fun saveProfile(model: Profile): Int

对于@Delete,如果返回Int,它将返回删除的行数:

@Delete
fun deleteProfiles(profiles: List<Profile>): Int

使用@Query进行更手动的实现同样,如果返回Int,则返回受影响的行数:

@Query("DELETE FROM profiles")
fun deleteAllProfiles(): Int