我有一个无法解决的大问题。我正在开发一个“提醒应用程序”,使您可以插入备忘录并在需要时通知您。好吧,我在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作为主键)应该是我所需要的。
现在我的问题是,如何将插入的Task的ID从TaskRepository返回到MainActivity以创建通知?
预先感谢您的帮助

一步

在存储库中,我设置了一个private long id;变量。

在onPostExecute内,如上面的代码所示,我设置了id=test;,并创建了一个像这样的方法:

public long getId(){
    return id;
}


在插入方法之后从MainActivity调用它。
问题是我第一次运行该应用程序并创建一个Task时,此变量中的值始终为0。如何解决此问题?

最佳答案

这可能对您有帮助。

基于文档here(在代码片段下方)

带有@Insert注释的方法可以返回:


long用于单次插入操作
long[]Long[]List<Long>用于多次插入操作
void(如果您不关心插入的ID)

07-28 13:15
查看更多