购买完成后 UI 元素更新不起作用 - Google 计费客户端 4

Posted

技术标签:

【中文标题】购买完成后 UI 元素更新不起作用 - Google 计费客户端 4【英文标题】:UI element updates does not work when purchase completed - Google billing client 4 【发布时间】:2021-08-29 05:16:52 【问题描述】:

我已改用 Google 计费客户端 4.0 库。从那以后购买完成后,我的 ui 元素更新不起作用。

我试图检查它们是否不再在 UThread 中或其他什么,但它仍然无法正常工作。

billingClient!!.acknowledgePurchase(
                            acknowledgePurchaseParams
                        )  billingResult ->
                            if (billingResult.responseCode == BillingClient.BillingResponseCode.OK) 
                                saveSubscription(purchase.purchaseToken, sku)
                                mainAct?.runOnUiThread 
                                Toast.makeText(context , "Vásárlás sikeres", Toast.LENGTH_SHORT)
                                        .show()
                                delegate?.purchaseSuccess(
                                        actProduct,
                                        prevProduct,
                                        purchase.purchaseToken
                                    )
                                
                            
                        

确认完成后,我的 UI 元素应该会更新。应该启用一个菜单项,并且在购买页面中,一个文本字段应该显示该项目已购买。代码正在运行,但 UI 元素未更新。

一旦我移动到不同的片段,菜单项就会变为启用,所以在我看来,UI 没有刷新。

在代码中 mainAct 是 MainActivity 的上下文。

有什么想法吗?

代码在 Billing 库 3.0.3 上正常运行,并且根本不需要 runOnUIThread。

这个库仍然有奇怪的行为。在我的用户登录应用程序并从登录页面转到第一个片段的同时,我正在设置帐单。这个片段有一个 recyclerview,这个 recycler 视图充满了来自网络的数据。回收器视图随机不显示元素,即使它们已加载并且适配器已正确更新。

您移动到另一个片段并返回回收站视图正确显示数据。

正如我所说,第一次调用计费服务器时,UIThread 被搞砸了,即使更新了数据标签或菜单,也没有显示更新。

所以这个库肯定有问题。

有什么想法吗?

【问题讨论】:

【参考方案1】:

这种行为有点奇怪。文档说大多数计费库函数可以从任何线程运行。只有少数需要在 UIThread 上运行。 AcknowlegdePurchase 应该在 AnyThread 上运行。

我已将 Toast 放入 runOnUIThread 和委托函数内部,我还将所有命令放入 runOnUIThread 闭包中。

现在它可以在计费库 3.0.3 上使用。但是文档没有说明任何这些变化,所以真的不清楚为什么两个库之间的行为发生了如此大的变化。

【讨论】:

以上是关于购买完成后 UI 元素更新不起作用 - Google 计费客户端 4的主要内容,如果未能解决你的问题,请参考以下文章

更新Mac应用程序,SwiftyStoreKit后恢复购买不起作用

元素 UI 树数据未使用 Vue 更新

更新到 Xcode 10 后 XCUITest 的测试目标似乎不起作用

编辑 WorkItem 不起作用 - UI 未更新 - VS2019 ADOS 2020

jQuery ui对话框中的Asp.net ajax自动完成功能不起作用

更新后应用内计费不起作用 - Google 商店