android - 为什么 onPurchasesUpdated() 的实现会导致 ITEM_ALREADY_OWNED 和一个空的购买列表?
问题描述
我目前正在为可消耗的虚拟硬币实施应用内购买。
我正在使用内部测试轨道并且我的测试帐户已连接。
启动计费流程由一个按钮启动。
但是有几个问题。
采购清单为空,我认为这不正常。
@Override
public void onPurchasesUpdated(BillingResult billingResult, @Nullable List<Purchase> purchases) {
if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK && purchases != null) {
for (Purchase purchase : purchases) {
handlePurchase(purchase);
}
} else if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.USER_CANCELED) {
} else {
}
if 语句将不会运行。
如果我尝试通过将此代码段传递给 onPurchasesUpdated() 中的 else 语句来强制测试 handlePurchases() 的功能,则会导致空对象引用错误,因为它试图遍历空列表。
for (Purchase purchase : purchases) {
handlePurchase(purchase);
}
BillingResult 代码返回:ITEM_ALREADY_OWNED
为了解决这个问题,我尝试调用 consumeAsync(),如下面的代码所示。
public void handlePurchase(Purchase purchase) {
if (purchase.getPurchaseState() == Purchase.PurchaseState.PURCHASED) {
// Grant entitlement to the user.
ConsumeParams consumeParams =
ConsumeParams.newBuilder()
.setPurchaseToken(purchase.getPurchaseToken())
.build();
client.consumeAsync(consumeParams, consumeResponseListener);
}
}
此外,我还退还了 Play 管理中心订单管理中的所有现有订单。
我的问题是为什么 ITEM_ALREADY_OWNED 错误仍然存在,为什么采购清单是空的。
解决方案
推荐阅读
- excel - 如何在 Mac (parallèle) 中使用 vba 创建文件?
- react-native - npx react-native init 挂起,没有任何输出
- javascript - 如何过滤字符串中的确切单词?
- python - 布尔值的初始组合框值显示为 1 而不是 True
- c# - 如何在我的不同服务类中使用通用类 T?
- node.js - 是否可以向服务器发送带有多个 cookie 的 HTTPS 请求?云端nodejs
- sql - 如何防止Oracle中的并发INSERT
- r - 无法将 PCA prcomp 中的标签从行号更改为站点名称
- xml - 如果工作表可见,则在自定义功能区的组中显示一个按钮
- java - 如何从文件中获取变量并使其成为全局变量?