【问题标题】:Do I need an AsyncTask to Query a row in my Android Room Database?我是否需要 AsyncTask 来查询我的 Android 房间数据库中的一行?
【发布时间】:2019-04-25 10:10:06
【问题描述】:

我正在做一个地图活动, 在标记单击时,我会在文本视图上显示信息。 信息保存在 android room 数据库中,因为我需要数据持久化。

我只想查询一行,列名,标记标签

我已经搜索了很多查询一行的方法,但没有一个是针对我的问题的。

【问题讨论】:

  • 是的,您可以使用 AsynTask。对于简单的执行,只需使用 Room 的 Executor 即可。
  • 您需要在后台线程上进行 Room 查询。但是,AsyncTask 已过时。现代 Android 开发使用其他方法进行线程管理。例如,您的 Room DAO 可以让这个 @Query 方法返回 LiveData 或 RxJava 类型(例如,Single)。
  • @CommonsWare,你是什么意思?我确实有很多 atQuery 的 Room DAO。但是网上没有什么建议如何正确使用它来只调用一行,所有的教程都是insert/query all/delete all
  • “但是网上没有什么建议如何正确使用它来只调用一行”——嗯,这只是 SQL(例如,SELECT ... FROM table WHERE _ID = :id)。 Room 文档显示了单实体 DAO 查询(请参阅 here)。
  • One of my books 涵盖单实体 DAO 查询。示例包括thisthis

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


【解决方案1】:

是的,对 Room 数据库的读写必须是异步的。因此,您必须在以下位置运行查询:

AsyncTask.execute(new Runnable()
{
    @Override
    public void run()
    {

        // run your queries here!
    }
});

祝你好运。

【讨论】:

  • 我不能为每个查询都写一个 AsyncTask 吗?
  • 数据库操作必须是异步的。您可以使用此方法或任何其他方法异步运行查询。
  • 你可以编写你的单例模式类,这样你就可以在任何地方使用它而无需重写代码。
猜你喜欢
  • 2020-05-01
  • 1970-01-01
  • 2016-05-29
  • 2011-02-03
  • 1970-01-01
  • 2021-05-21
  • 1970-01-01
  • 1970-01-01
  • 2012-08-21
相关资源
最近更新 更多