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

问题描述

我已改用 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。

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

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

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

所以这个库肯定有问题。

有什么想法吗?

解决方法

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

我已将 Toast 放入 runOnUIThread 中,并且在委托函数内部,我也将所有命令放入了 runOnUIThread 闭包中。

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