当前位置: 首页 > 知识库问答 >
问题:

Android Room-使用LiveData选择查询

虞安康
2023-03-14

我无法使用category和date列获取行的ID。每当我使用LiveData观察方法更新我的int id时,观察方法都会在最后执行。

例如,代码:

if(duplicate) {
    Log.e("FIRST: ", "ID: " + id);
    mViewModel.getId(category, date).observe(getActivity(), new Observer<Integer>() {
        @Override
        public void onChanged(@Nullable Integer integer) {
        id = integer;
        Log.e("SECOND", "ID " + id);
        }
    });
    Log.e("THIRD: ", "ID: " + id);
}
Log.v("LOG: ", "ID: " + id);

这是Logcat的结果:

第一:ID:0

第三:ID: 0

日志::ID:0

第二:身份证1

为什么代码在mViewModel中。getId(类别、日期)。观察 日志之后执行。v?如何将第三个和第二个日志中的id设置为第二个(aka 1)?

我的ViewModel中的代码:

LiveData<Integer> getId(String cat, String date) {return mRepository.getId(cat, date); }

我的存储库中的代码:

LiveData<Integer> getId(String cat, String date) {return mBudgetDao.getId(cat, date); }

我的Dao中的代码:

@Query("SELECT id FROM budget_table WHERE category = :category AND date = :date")
LiveData<Integer> getId(String category, String date);

在我的数据库中,是否有其他方法可以使用query而不使用allowMainThreadQueries()来获取ID?


共有2个答案

岳佐
2023-03-14

LiveData异步工作。如果想要同步结果(按顺序执行),则不能使用LiveData。在构建数据库时,可以使用allowMainThreadQueries()

Room.databaseBuilder(context, AppDatabase::class.java, DATABASE_NAME).allowMainThreadQueries().build()

但是完全不建议这样做。选择数据的过程会阻塞主线程。您应该给一些时间来阅读LiveData文档以及异步的工作原理。

郑正阳
2023-03-14

当你观察mViewModel中的LiveData对象时,并不意味着onChanged会立即返回。如果LiveData对象已经有了一个值,那么您可以直接获得它,但不能保证。

你实际上是在观察随时可能发生的变化。在您的情况下,这是一个数据库请求,在返回值之前需要一些时间才能完成。

 类似资料:
  • 我在用房间数据库。

  • 问题内容: 我有一个关于MYSQL中的选择查询的问题 我有两个不同的表,我想获得一定的结果 我使用了COUNT方法,该方法只给我结果(> = 1) 但实际上,我想使用包含零的所有计数怎么做? 我的查询是: 第一张桌子:Content_hits 第二张表:Content_tag 结果但不完整 例如:tag_id = 1的Subsrciber6应该具有count(*)= 0 问题答案: 现在,您已经进

  • 我试图使用jpa组件来选择从标题中获取的id。我在文档中找到了一个使用本机select查询的示例: 我试图用${header.id}替换“1”常量: 这似乎不管用,我明白了: 也许还有别的方法可以让它发挥作用?

  • 我想在hibernate中选择最大日期,但出现以下错误: Java语言sql。SqlSyntaxerRorexException:ORA-00932:不一致的数据类型:预期的时间戳得到的数字 查询是: 数据库是oracle。数据库中该字段的类型为时间戳(6)

  • 问题内容: 我有一张表,默认有20列 这20列名为D1 D2 D3 … D20,现在带有选择查询,我想动态添加其他列。例如,对于D21 D22 … D31,我如何编写查询以动态递增添加此列值..最大限制为31,请帮助 缺省表列 D1 D2 D3 D4 D5 D6 D7 D8 D9 D10 D11 D12 D13 D14 D15 D16 D17 D18 D19 D20 现在我想在连续性将列添加到D2