我正在使用项目中新架构组件的房间数据库.

adding to database, I checked with debugger, this statement executed successfully.

appContext.db.rallyDAO().addVehicleListItem(vehicle)

在INSERT之后从此语句的数据库中获取NULL.

val v = appContext.db.rallyDAO().getVehicleListItem(it.vehicleID)

RoomDatabase

@Database(entities = arrayOf(Rally::class, Route::class, CheckPoints::class, Vehicles::class, VehicleListItem::class), version = 1)
abstract class TSDRoom: RoomDatabase() {
    public abstract fun rallyDAO():RallyDAO
}

内部DAO

@Insert(onConflict = OnConflictStrategy.REPLACE)
    fun addVehicleListItem(vehicleListItem:VehicleListItem)

    @Query("select * from vehicles_submitted where vehicle_id LIKE :vehicleID")
    fun getVehicleListItem(vehicleID:String):VehicleListItem

VehicleListItem Entity

@Entity(tableName = "vehicles_submitted",
        foreignKeys = arrayOf(ForeignKey(entity = Rally::class,
                parentColumns = arrayOf("rally_id"),
                childColumns = arrayOf("rally_id"))))
class VehicleListItem {
    @PrimaryKey
    @ColumnInfo(name = "vehicle_id")
    @SerializedName("vehicle_id")
    var vehicleID : String = ""
    @ColumnInfo(name = "driver_id")
    @SerializedName("driver_id")
    var driverID : String = ""
    @ColumnInfo(name = "vehicle_name")
    @SerializedName("vehicle_name")
    var vehicleName : String = ""
    @ColumnInfo(name = "driver_name")
    @SerializedName("driver_name")
    var driverName : String = ""
    @ColumnInfo(name = "driver_email")
    @SerializedName("driver_email")
    var driverEmail : String = ""

    @ColumnInfo(name = "rally_id")
    @SerializedName("rally_id")
    var rallyID: String = ""

    @ColumnInfo(name = "is_passed")
    @SerializedName("is_passed")
    var isPassed = false

    @ColumnInfo(name = "passing_time")
    @SerializedName("passing_time")
    var passingTime:String=""
}

推荐答案

问题出在线程中.

doAsync {
                        val addedID = appContext.db.rallyDAO().addVehicleListItem(vehicle)
                        Logger.d("vehicle_lsit_item","Inserted ID $addedID")
        }

另外,我查看了documentation,insert方法可能会返回一个Long(如果List传递给insert,则返回Long的列表).我还更改了insert的签名,下面是修改后的代码

@Insert(onConflict = OnConflictStrategy.REPLACE)
fun addVehicleListItem(vehicleListItem:VehicleListItem):Long

另外,我用anko表示doAsync

Kotlin相关问答推荐

Jetpack Compose Material3和Material2 Slider onValueChangeFinded()的行为不同

Kotlin 中命名构造函数的惯用方式

ActivityResultContracts TakePicture 结果总是返回 false

使用 StateFlow 时如何移除监听器?

Kotlin - 协程未按预期执行

Kotlin 中的密封和内部有什么区别?

在jetpack compose中将默认方向设置为横向?

在 Kotlin 中 import 如何找到文件路径?

如何将字符串格式化为电话号码kotlin算法

Kotlin 从其他类调用成员扩展函数

Kotlin 代码是如何编译成原生代码的?

Android Studio 4.0.0 Java 8 库在 D8 和 R8 构建错误中脱糖

为什么 Dialog 没有 NavController [Missing]?

Kotlin:什么是 kotlin.String!类型

在Kotlin中传递并使用函数作为构造函数参数

如何在Kotlin中创建无限长的序列

如何在Android Studio 4.1中默认启用Kotlin Android扩展

Kotlin 中更好的回调方法是什么?侦听器与高阶函数

spring.config.location 在 Spring Boot 2.0.0 M6 上不起作用

Kotlin - 如果不为空,则使用修改后的 Obj props 覆盖 Obj props