【问题标题】:i want to get last id in response of inserting in room persistence我想获得最后一个 id 以响应插入房间持久性
【发布时间】:2019-05-18 12:24:03
【问题描述】:

我正在为我的 android 应用程序使用房间持久性库,当我插入 android 房间持久性库然后想要代表 id 选择表的数据时,我想获取生成的最后一个 id(主键自动生成)

p>
@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
public interface TaskDao {

    @Query("SELECT * FROM task")
    List<Task> getAll();

    @Insert
    void insert(Task task);
    @Delete
    void delete(Task task);
    @Update
    void update(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();
}

【问题讨论】:

    标签: java android sqlite android-room


    【解决方案1】:

    可以通过将@Insert 函数指定为具有official documentation 中提到的long 返回类型来获取id。

    因此,您需要按如下方式更改Dao 代码以获取生成的ID,

    @Insert
    long insert(Task task);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-29
      • 1970-01-01
      • 1970-01-01
      • 2018-03-02
      • 1970-01-01
      • 1970-01-01
      • 2023-03-16
      • 2011-04-30
      相关资源
      最近更新 更多