为什么Room Persistence Library查询不会立即生效?

时间:2017-12-15 17:14:12

标签: java android database android-asynctask android-room

我想在Android应用程序中使用java来解决Room的问题。但是,我遇到了一个问题,即只有在第二次查询数据库后查询才会生效。

例如: 该应用程序有两个按钮“返回DB”和“删除数据库”。单击“删除数据库”按钮时,将使用主活动中的方法。该方法使用AsyncTask来调用相关的DAO。所以说实体的表目前有3条记录{A,B,C}。当我按“删除数据库”然后按“返回数据库”时,我希望它返回{},但在这种情况下,它仍然返回{A,B,C}。在此之后,当我第二次按下“返回DB”时,它会返回{}。

对此我不熟悉,我只是想知道是否有人遇到过类似的问题。谢谢!

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();
.
.
.

1 个答案:

答案 0 :(得分:0)

哎呀,抱歉,我傻了。我正在执行AsyncTask并立即记录结果,但由于任务是在后台线程中完成的,因此它记录旧数据而不是等待新数据。我只需要将Log语句放在AsyncTask本身中。