Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我想获取插入房间持久性的最后一个id_Java_Android_Sqlite_Android Room - Fatal编程技术网

Java 我想获取插入房间持久性的最后一个id

Java 我想获取插入房间持久性的最后一个id,java,android,sqlite,android-room,Java,Android,Sqlite,Android Room,我正在为我的android应用程序使用room persistence library我希望在插入android room persistence library时获得生成的最后一个id(主键自动生成),然后代表id选择表的数据 @Entity public class Task implements Serializable { @PrimaryKey(autoGenerate = true) private int id; @ColumnInfo(name = "

我正在为我的android应用程序使用room persistence library我希望在插入android room persistence library时获得生成的最后一个id(主键自动生成),然后代表id选择表的数据

@Entity
public class Task implements Serializable {

    @PrimaryKey(autoGenerate = true)
    private int id;

    @ColumnInfo(name = "task")
    private String task;

    @ColumnInfo(name = "desc")
    private String desc;

    @ColumnInfo(name = "finish_by")
    private String finishBy;

    @ColumnInfo(name = "finished")
    private boolean finished;


    /*
    * Getters and Setters
    * */
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getTask() {
        return task;
    }

    public void setTask(String task) {
        this.task = task;
    }

    public String getDesc() {
        return desc;
    }

    public void setDesc(String desc) {
        this.desc = desc;
    }

    public String getFinishBy() {
        return finishBy;
    }

    public void setFinishBy(String finishBy) {
        this.finishBy = finishBy;
    }

    public boolean isFinished() {
        return finished;
    }

    public void setFinished(boolean finished) {
        this.finished = finished;
    }
}
然后

@Dao
公共接口任务DAO{
@查询(“从任务中选择*)
List getAll();
@插入
无效插入(任务);
@删除
作废删除(任务);
@更新
无效更新(任务);
}

private void saveTask(){
最后一个字符串sTask=editTextTask.getText().toString().trim();
最后一个字符串sDesc=editTextDesc.getText().toString().trim();
最后一个字符串sFinishBy=editTextFinishBy.getText().toString().trim();
if(sTask.isEmpty()){
editTextTask.setError(“需要任务”);
editTextTask.requestFocus();
返回;
}
if(sDesc.isEmpty()){
editTextDesc.setError(“需要描述”);
editTextDesc.requestFocus();
返回;
}
if(sFinishBy.isEmpty()){
editTextFinishBy.setError(“按要求完成”);
editTextFinishBy.requestFocus();
返回;
}
类SaveTask扩展了AsyncTask{
@凌驾
受保护的空位背景(空位…空位){
//创建任务
任务=新任务();
task.setTask(sTask);
task.setDesc(sDesc);
task.setFinishBy(sFinishBy);
task.setFinished(false);
//添加到数据库
DatabaseClient.getInstance(getApplicationContext()).getAppDatabase()
.taskDao()
.插入(任务);
返回null;
}
@凌驾
受保护的void onPostExecute(void避免){
super.onPostExecute(避免);
完成();
startActivity(新意图(getApplicationContext(),MainActivity.class));
Toast.makeText(getApplicationContext(),“已保存”,Toast.LENGTH_LONG.show();
}
}
SaveTask st=new SaveTask();
st.execute();
}

通过将
@Insert
函数指定为返回类型,可以获取id,如中所述

因此,您需要如下更改
Dao
代码以获得生成的ID

@Insert
long insert(Task task);
private void saveTask() {
    final String sTask = editTextTask.getText().toString().trim();
    final String sDesc = editTextDesc.getText().toString().trim();
    final String sFinishBy = editTextFinishBy.getText().toString().trim();

    if (sTask.isEmpty()) {
        editTextTask.setError("Task required");
        editTextTask.requestFocus();
        return;
    }

    if (sDesc.isEmpty()) {
        editTextDesc.setError("Desc required");
        editTextDesc.requestFocus();
        return;
    }

    if (sFinishBy.isEmpty()) {
        editTextFinishBy.setError("Finish by required");
        editTextFinishBy.requestFocus();
        return;
    }

    class SaveTask extends AsyncTask<Void, Void, Void> {

        @Override
        protected Void doInBackground(Void... voids) {

            //creating a task
            Task task = new Task();
            task.setTask(sTask);
            task.setDesc(sDesc);
            task.setFinishBy(sFinishBy);
            task.setFinished(false);

            //adding to database
            DatabaseClient.getInstance(getApplicationContext()).getAppDatabase()
                    .taskDao()
                    .insert(task);
            return null;
        }

        @Override
        protected void onPostExecute(Void aVoid) {
            super.onPostExecute(aVoid);
            finish();
            startActivity(new Intent(getApplicationContext(), MainActivity.class));
            Toast.makeText(getApplicationContext(), "Saved", Toast.LENGTH_LONG).show();
        }
    }
    SaveTask st = new SaveTask();
    st.execute();
}
@Insert
long insert(Task task);