【问题标题】:Wait for AsyncTask.execute(()) to finish before returning result在返回结果之前等待 AsyncTask.execute(()) 完成
【发布时间】:2020-05-13 19:49:16
【问题描述】:

我正在从本地 Android RoomDB 读取数据,我需要在后台进行,因为在 UI Thread 上不允许从 DB 读取数据。所以我有这个方法:

@Override
public DBBackedRouteModel getDBBackedRouteModelByID(Long id) {
    AsyncTask.execute(() -> {
        this.dbBackedRouteModel = routesParser.getDBBackedRouteModel(id);
    });
    return dbBackedRouteModel;
}

有没有办法知道Async 已经完成,然后才返回结果?

【问题讨论】:

  • 我认为你需要实现 onPostExecute() 方法 AsyncTask。 onPostExecute 仅在您的流程完成时调用

标签: android asynchronous android-asynctask android-room


【解决方案1】:

您可以使用callbacks。我不确定你到底想做什么,但你可以,例如,在异步完成时做一个控制台日志。

【讨论】:

  • 好吧,在这种情况下,我试图返回 dbBackedRouteModel,但使用当前代码,它将返回 null,因为它会在 ASyncTask 完成之前返回它
  • 我不太确定,因为我以前没有遇到过类似的事情,但this 可能会有所帮助
【解决方案2】:

您可以使用 EventBus。异步任务的 onPostExecute() 方法,您可以发布事件并传递您要读取的值。 希望这能解决你的问题

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-08
    • 2021-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-11
    相关资源
    最近更新 更多