【发布时间】:2021-12-28 20:35:52
【问题描述】:
我有一个使用片段、导航和视图模型的应用。我无法从我的视图模型 (CustomerViewModel.kt) 中调用查询“getCustomerById”。 更多细节: 我从 CustomerFragment 中选择客户,这会打开 CustomerDetailFragment 并显示有关客户的详细信息。我对两个片段都使用了一个通用的 ViewModel。大多数事情都有效,但我无法让我的查询 (getCustmoerbyID) 从 CustomerDetailsFragment 工作。我有一个编译器错误。 代码如下所示。
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
val customer = customerViewModel.geCustomerById("11")
Log.i(Constants.LOG_TAG, "Customer details fragment. ${customer.first().firstName}. Done ** onViewCreated. **")
}
错误出现在日志语句中,对于方法 first()。 "挂起函数'首先'应该只从协程或另一个挂起函数中调用"
与“getCustomerCount”相同的问题。由于我对协程缺乏了解,我花了几个小时或几天的时间。我不能从原始应用程序中放置代码,所以我在 github 上放置了一个简化的应用程序。链接如下。 https://github.com/msyusuf。 ViewModel 是 CustomerViewModel。查询是
fun geCustomerById(cust_id: String) : Flow<Customer> { return repository.geCustomerById(cust_id) }
其他类是 CustomerDao.kt、CustomerRepository.kt、CustomerFragment、CustomerDetailsFragment.kt。
【问题讨论】:
-
从 CustomerDetailsFragment 调用代码失败。
标签: android kotlin android-room kotlin-coroutines kotlin-flow