我的Android项目中有以下Java类。
@Entity
public class Daily {
@PrimaryKey
private Date dailyId;
//Other non important attrs, getters, setters, etc.
}
@Entity(primaryKeys = {"dailyId", "dailyDetailId"})
public class DailyDetail {
private Date dailyId; //which is the value of its unique parent.
private Long dailyDetailId;
//Other non important attrs, getters, setters, etc.
}顺便说一句:我已经添加了类型转换器。
当我试图构建这个项目时,我会得到以下错误:
You must annotate primary keys with @NonNull. "dailyId" is nullable. SQLite considers this a bug and Room does not allow it.然后,当我按照说明将@NonNull添加到dailyid中时,它是Not-null fields must be initialized (?)
我该怎么解决这个问题?我的想法是初始化两个主键,但是当我尝试向DB插入一个新对象时,这应该是一个问题。
发布于 2020-04-26 17:30:01
然后,当我按照指令将@NonNull添加到dailyid时,它说非空字段必须初始化(?)
如果用@NonNull对字段进行注释,就会告诉编译器“这个东西永远不会是空的”。但是,Java中未初始化对象的默认值是什么?没错!零。因此,如果用@NonNull对字段进行注释,则必须对其进行初始化,以确保它不会从null开始。
我该怎么解决这个问题?
初始化您的字段。无论是在声明时还是在类构造函数中。
@NonNull
@PrimaryKey
private Date dailyId = new Date(); // Now it's initialized and not null或
@Entity
public class Daily {
@NonNull
@PrimaryKey
private Date dailyId;
public Daily() {
dailyId = new Date(); // Now it's initialized and not null
}
// ^- this AND / OR this -v
// Note here that if using an argument in the constructor, it too must be
// annotated as @NonNull to tell the compiler that you're setting the value
// of your non-nullable field to something that won't itself be null
public Daily(@NonNull Date initialDate) {
dailyId = initialDate; // Now it's initialized and not null
}
}希望这能帮上忙!
https://stackoverflow.com/questions/61444648
复制相似问题