【发布时间】:2020-11-07 18:11:18
【问题描述】:
我正在使用 Room 在本地缓存我的用户购买。为此,我创建了一个 insert 函数,该函数正在暂停。
首先,在我的存储库中,我从一个名为 launchBillingFlow 的函数调用了 insert 函数,该函数处于挂起状态,其签名如下所示:
suspend fun launchBillingFlow(activity, skuDetails)
我这样做没有任何错误。之后,我创建了一个private 函数来确认购买并将insert 调用移到那里。它的签名是这样的:
private suspend fun acknowledgePurchase(purchase)
但是当我从那里调用插入函数时,出现以下错误:
Suspension functions can be called only within coroutine body
我不明白为什么会这样。我从协程主体调用launchBillingFlow,它调用acknowledgePurchase。我也在做类似的事情来查询 SkuDetails。这是 lint 错误还是我遗漏了什么?
【问题讨论】:
-
你确定你没有从 lambda 或回调中调用另一个挂起函数?
-
@Tenfour04 好点!我从
ResponseListener给它打电话,以确认购买是错误的。我将使用suspendCoroutine来修复它。谢谢! -
顺便说一句,这不是 lint 错误,而是硬编译错误。 Kotlin 不可能在协程之外编译对可挂起函数的调用。
标签: android kotlin kotlin-coroutines