从另一个暂停函数调用暂停函数时,获取“只能在协程体内调用暂停函数”

时间:2020-07-17 22:09:42

标签: android kotlin kotlin-coroutines

我正在使用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的错误还是我遗漏了一些东西?

1 个答案:

答案 0 :(得分:1)

这不是棉绒错误。 它说您需要在方法中使用协程上下文

皮棉消息为:

挂起功能只能在协程体内

内调用

我知道挂起函数只能在另一个挂起函数内部 在协程内部调用。

相反,此消息说只能在协程内部调用,但实际上这并不矛盾。

要了解该消息,您可以忽略其中的暂停词并按以下方式阅读该消息:

[功能名称]只能在协程体内调用,因为它需要协程上下文。

它需要协程上下文的原因不是因为它被挂起,而是因为在其中您调用了需要上下文的方法。