我正在使用Room在本地缓存我的用户购买的商品。为此,我创建了一个insert
函数,该函数正在挂起。
首先,在我的存储库中,我从一个名为insert
的函数中调用了launchBillingFlow
函数,该函数正在挂起,其签名如下所示:
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
的错误还是我遗漏了一些东西?
答案 0 :(得分:1)
这不是棉绒错误。 它说您需要在方法中使用协程上下文
皮棉消息为:
挂起功能只能在协程体内
内调用
我知道挂起函数只能在另一个挂起函数内部 和在协程内部调用。
相反,此消息说只能在协程内部调用,但实际上这并不矛盾。
要了解该消息,您可以忽略其中的暂停词并按以下方式阅读该消息:
[功能名称]只能在协程体内调用,因为它需要协程上下文。
它需要协程上下文的原因不是因为它被挂起,而是因为在其中您调用了需要上下文的方法。