Java 我想获取插入房间持久性的最后一个id
我正在为我的android应用程序使用room persistence library我希望在插入android room persistence library时获得生成的最后一个id(主键自动生成),然后代表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 = "
@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);