room的基本使用不做介绍。
项目中添加的依赖配置:
dependences{
def room_version ="2.2.5"//room以及依赖库版本
api "androidx.room:room-runtime:$room_version"//room库
kapt "androidx.room:room-compiler:$room_version"//注解处理 kotlin 使用kapt
implementation "androidx.room:room-rxjava2:$room_version"//room rxjava
implementation "androidx.room:room-guava:$room_version"//非必须
testImplementation "androidx.room:room-testing:$room_version"//测试有效
}
有问题的kotlin实体:
@Entity(tableName = "tb_schoolbean")
data class SchoolBean(
var belongTo: String,
var collegeSpec: String,
var collegeType: String,
var department: String,
var invited: Int=0,
var logo: String,
var major: String,
var name: String,
var region: String,
var status: Boolean,
var summary: String,
@PrimaryKey
@Nullable
var collegeId: String
) : Serializable, MultiItemEntity {
override fun getItemType(): Int {
return 5
}
}
这里踩了kotlin的坑,实体的成员变量未添加 ? ,则默认为非空字段,编译阶段生成的建表语句为各个字段都添加了 NOT NULL 非空约束,实际业务场景中字段有为空情况,进行插入数据就报了错:
[Error Inserting : NOT NULL constraint failed: (code 1299) in Room Database]
修改后实体:
@Entity(tableName = "tb_schoolbean")
data class SchoolBean(
var belongTo: String?,
var collegeSpec: String?,
var collegeType: String?,
var department: String?,
var invited: Int=0,
var logo: String?,
var major: String?,
var name: String?,
var region: String?,
var status: Boolean,
var summary: String?,
@PrimaryKey
@Nullable
var collegeId: String
) : Serializable, MultiItemEntity {
override fun getItemType(): Int {
return 5
}
}





网友评论