【发布时间】:2020-03-08 21:41:21
【问题描述】:
所以我需要从插入函数中获取插入项的 ID。包括来自 Google 的 this one 在内的多个消息来源说,可以通过 Single 作为 @Insert 带注释的 DAO 函数的返回值来执行此操作。 不幸的是,编译总是退出:
xxx\CarDao.java:19: error: Not sure how to handle insert method's return type.
public abstract java.lang.Object insert(@org.jetbrains.annotations.NotNull()
我尝试将其更改为 Maybe> 等,但总是同样的错误。
我的代码如下所示:
import androidx.lifecycle.LiveData
import androidx.room.*
import io.reactivex.Single
@Dao
interface CarDao {
@Query("SELECT * FROM cars")
fun getAll(): LiveData<List<Car>>
@Query("SELECT * FROM cars WHERE uid = :uid")
fun getById(uid: Int): Single<List<Car>>
@Insert(onConflict = OnConflictStrategy.REPLACE)
suspend fun insert(car: Car): Single<Long>>
@Query("DELETE FROM cars WHERE uid = :uid")
suspend fun deleteById(uid: Int)
}
我完全不知道是什么原因造成的。那么我做错了什么,如果它只是一个错误,那么在我的 Activity 和此 Activity 数据的上下文中获取 id 的解决方法是什么?
更新: 找到了一个非常奇怪的解决方案:当我删除 suspend 关键字时,它编译没有任何问题。然后问题变成无法从主线程访问数据库。 为什么不挂起就可以,挂起就不行?
【问题讨论】:
-
您使用的是哪个版本的 Room?
-
它的版本是 2.2.4
标签: android sqlite rx-java2 android-room