我无法使用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?
LiveData异步工作。如果想要同步结果(按顺序执行),则不能使用LiveData。在构建数据库时,可以使用allowMainThreadQueries()
Room.databaseBuilder(context, AppDatabase::class.java, DATABASE_NAME).allowMainThreadQueries().build()
但是完全不建议这样做。选择数据的过程会阻塞主线程。您应该给一些时间来阅读LiveData文档以及异步的工作原理。
当你观察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