Android Billing从V3迁移至V5:PurchasesResult等符号无法解析求助
Android Billing 3 迁移至 Billing 5:onBillingSetupFinished 函数适配方案
Billing Library 5.x 彻底移除了同步的queryPurchases()方法以及Purchase.PurchasesResult类,这是你遇到无法解析相关类和方法的核心原因。必须改用异步的queryPurchasesAsync()方法来查询用户的已购项目,以下是修改后的完整实现:
@Override public void onBillingSetupFinished(@NonNull BillingResult billingResult) { if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK) { // 构建查询参数,指定商品类型为INAPP QueryPurchasesParams queryParams = QueryPurchasesParams.newBuilder() .setProductType(BillingClient.ProductType.INAPP) .build(); // 异步查询已购项目 billingClient.queryPurchasesAsync(queryParams, new QueryPurchasesResponseListener() { @Override public void onQueryPurchasesResponse(@NonNull BillingResult result, @NonNull List<Purchase> purchases) { if (result.getResponseCode() == BillingClient.BillingResponseCode.OK) { if (purchases != null && !purchases.isEmpty()) { handlePurchases(purchases); } else { // 无已购项目,处理未购买/退款/取消状态 savePurchaseValueToPref(false); removepremium(); } } else { // 查询失败,兜底处理未购买状态 savePurchaseValueToPref(false); removepremium(); } } }); } }
核心修改点说明
- 弃用同步查询:Billing 5强制要求异步查询以避免阻塞主线程,用
queryPurchasesAsync()替代原同步的queryPurchases() - 参数构建方式变更:通过
QueryPurchasesParams.newBuilder()明确指定要查询的商品类型(INAPP或SUBS) - 直接获取Purchase列表:异步回调的
onQueryPurchasesResponse方法直接返回List<Purchase>,无需依赖已移除的PurchasesResult类 - 补充错误处理:新增查询操作本身失败的分支处理,保证状态逻辑的完整性
内容的提问来源于stack exchange,提问作者RGS
相关产品推荐
相关产品推荐

