【发布时间】:2020-05-10 09:41:43
【问题描述】:
我在房间数据库中创建了两个@Entity(tables)。第一个任务(Task.class)和第二个统计(TaskStat.class)。我想从第一类(Task.class)的第二个表中自动创建条目。为了在第二个表中插入条目,我在TaskDao.class 接口中创建了一个@Dao 方法。这是我的java代码:
任务.class
public class Task {
@PrimaryKey
@ColumnInfo(name = "task_ID")
private Long taskId;
@ColumnInfo(name = "creator_ID")
private Long creatorId;
private String title;
private String description;
@Ignore
private TaskDao taskDao;
public Task(String title){
this.taskId = IdGenerator.generate();
this.title = title;
TaskStat taskStat = new TaskStat(getTaskId());
taskDao.insertStat(taskStat);
}
public Long getTaskId() {
return taskId;
}
TaskStat.class
@Entity(tableName = "task_statistic",
foreignKeys = @ForeignKey(entity = Task.class, parentColumns = "task_ID",
childColumns = "ownerId", onDelete = ForeignKey.CASCADE))
public class TaskStat {
@PrimaryKey(autoGenerate = true)
private int id;
private long ownerId;
private boolean completed;
TaskStat(long ownerId) {
this.ownerId = ownerId;
this.completed = false;
}
public int getId() {
return id;
}
public long getOwnerId() {
return ownerId;
}
public boolean isCompleted() {
return completed;
}
public void setId(int id) {
this.id = id;
}
public void setCompleted(boolean completed) {
this.completed = completed;
}
}
TaskDao.class
@Dao
public interface TaskDao {
@Insert
void insert(Task task);
@Insert
void insertStat(TaskStat taskStat);
正如您在Task.class 中看到的那样,我希望每当我创建Task.class 的对象时,它会自动创建TaskStats.class 的对象,然后将其插入taskStat 表中。这两个表都是在数据库中创建的,但在第二个表(task_statistic)中没有条目。
它正在抛出NullPointException。问题出在哪里?
编辑:
我使用过的依赖项:
dependencies {
def lifecycle_version = "2.2.0"
def room_version = "2.2.5"
/*ViewModel and LiveData (New Style-in one Line)*/
implementation "androidx.lifecycle:lifecycle-extensions:$lifecycle_version"
annotationProcessor "androidx.lifecycle:lifecycle-compiler:$lifecycle_version"
/*Room Dependencies*/
implementation "androidx.room:room-runtime:$room_version"
annotationProcessor "androidx.room:room-compiler:$room_version"
}
【问题讨论】:
标签: java android-studio android-sqlite android-room