为什么 Room Persistence Library 查询没有立即生效?
Why are Room Persistence Library queries not taking effect immediately?
我正在尝试在 android 应用程序中使用 java 来掌握 Room 的窍门。不过,我 运行 遇到了一个问题,即查询仅在第二次查询数据库后才生效。
例如:
该应用程序有两个按钮 "Return DB" 和 "Delete DB." 单击 "Delete DB" 按钮时,使用主 activity 中的方法。该方法使用 AsyncTask 调用关联的 DAO。所以说实体的 table 当前有 3 条记录 {A, B, C}。当我按 "Delete DB" 然后按 "Return DB," 时,我希望它是 return { },但在这种情况下,它仍然是 returns {A, B, C}。在此之后,当我第二次按 "Return DB" 时,它会 return { }.
作为新手,我只是想知道是否有人遇到过类似的问题。谢谢!
MainActivity.java
.
.
.
public void deleteDB(View view) {
new DeleteDatabase().execute();
}
.
.
.
private class DeleteDatabase extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... voids) {
database.myEntityDao().nukeTable();
return null;
}
}
.
.
.
myEntityDao.java
.
.
.
@Query("DELETE FROM MyEntity")
void nukeTable();
.
.
.
哎呀,对不起,我做错了。我正在执行 AsyncTask 并立即记录结果,但是因为任务是在后台线程中完成的,所以它记录了旧数据而不是等待新数据。我只需要将 Log 语句放在 AsyncTask 本身中。
我正在尝试在 android 应用程序中使用 java 来掌握 Room 的窍门。不过,我 运行 遇到了一个问题,即查询仅在第二次查询数据库后才生效。
例如: 该应用程序有两个按钮 "Return DB" 和 "Delete DB." 单击 "Delete DB" 按钮时,使用主 activity 中的方法。该方法使用 AsyncTask 调用关联的 DAO。所以说实体的 table 当前有 3 条记录 {A, B, C}。当我按 "Delete DB" 然后按 "Return DB," 时,我希望它是 return { },但在这种情况下,它仍然是 returns {A, B, C}。在此之后,当我第二次按 "Return DB" 时,它会 return { }.
作为新手,我只是想知道是否有人遇到过类似的问题。谢谢!
MainActivity.java
.
.
.
public void deleteDB(View view) {
new DeleteDatabase().execute();
}
.
.
.
private class DeleteDatabase extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... voids) {
database.myEntityDao().nukeTable();
return null;
}
}
.
.
.
myEntityDao.java
.
.
.
@Query("DELETE FROM MyEntity")
void nukeTable();
.
.
.
哎呀,对不起,我做错了。我正在执行 AsyncTask 并立即记录结果,但是因为任务是在后台线程中完成的,所以它记录了旧数据而不是等待新数据。我只需要将 Log 语句放在 AsyncTask 本身中。