java - 如何将 Repository 自动生成的 ID 返回到 MainActivity?
问题描述
我有一个无法解决的大问题。我正在开发一个“提醒应用程序”,它允许您插入备忘录并在该做的时候通知您。好吧,我在 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;
}
它是在插入方法之后从 MainActivity 调用的。问题是我第一次运行应用程序并创建任务时,此变量中的值始终为 0。我该如何解决这个问题?
解决方案
这可能会对您有所帮助。
基于此处的文档(在代码片段下方)
使用注解@Insert
注解的方法可以返回:
long
用于单次插入操作long[]
或Long[]
或List<Long>
用于多个插入操作void
如果你不关心插入的 id(s)
推荐阅读
- blogger - 如何使“精选帖子”仅在我的博客首页上可见
- c# - CosmosDB 中的跨分区分页
- python - 如果字典值是一个列表,如何计算该列表中的项目?
- sql - 如果日期格式不是 mm/dd/yyyy,则报告日期无法正常工作
- c - 以安全的方式借用指针
- java - 如何在for循环中将变量放入映射中
- javascript - Tippy.js 不显示数据属性的内容?
- java - 处理使用可完成期货的实体列表
- php - PHP 解析错误:语法错误,意外的 '$sourcecoin' (T_VARIABLE),期望 ',' 或 ';'
- c# - MediaPlayer 停止音频声音 C#