我有一个无法解决的大问题。我正在开发一个“提醒应用程序”,使您可以插入备忘录并在需要时通知您。好吧,我在Android中使用Room,当我插入新任务时,我想使用插入任务的ID作为ID来管理通知。我同时有TaskViewModel和TaskRepository。这是我写的代码:
在DAO中,我有:
@Insert
long insert(Task task);
在“主要活动”中,我有:
Task task = new Task(title, data_calendario, time, priority, type, note, "pending");
taskViewModel.insert(task);
在TaskViewModel中,我有:
public void insert(Task task){
repository.insert(task);
}
在TaskRepository中,我有:
public void insert(Task task){
new InsertTaskAsyncTask(taskDao).execute(task);
}
private class InsertTaskAsyncTask extends AsyncTask<Task, Void, Long>{
private TaskDao taskDao;
private InsertTaskAsyncTask(TaskDao taskDao){
this.taskDao = taskDao;
}
@Override
protected Long doInBackground(Task... tasks) {
Long test = taskDao.insert(tasks[0]);
System.out.println("Stampa repository BUONO: "+test); //here I have the id that I need (I think..)
return test;
}
@Override
protected void onPostExecute(Long test) {
super.onPostExecute(test);
id = test;
}
}
我读到可以从Insert方法检索插入的行的ID(我在task_table上有一个自动生成的int ID作为主键)应该是我所需要的。 现在的问题是,如何将插入的任务的ID从 TaskRepository 返回到我的 MainActivity ,以创建通知? 预先感谢您的帮助
一步
在存储库中,我设置了一个private long id;
变量。
在onPostExecute内,您设置了id=test;
,如您在上面的代码中看到的那样,我创建了这样的方法:
public long getId(){
return id;
}
在insert方法之后从MainActivity调用它。 问题是我第一次运行该应用程序并创建一个Task时,此变量中的值始终为0。如何解决此问题?
答案 0 :(得分:0)
这可能会对您有所帮助。
基于文档here(在代码段下方)
带有@Insert
批注的方法可以返回:
long
用于单次插入操作long[]
或Long[]
或List<Long>
进行多次插入操作void
(如果您不关心插入的ID)