You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

In-App-Billing V3库onActivityResult触发空指针异常问题排查

解决In-App-Billing V3测试内购后NullPointerException的问题

咱们先从你给出的错误栈入手分析:空指针异常出现在JSON解析环节,具体是调用了一个null字符串的length()方法,追踪到BillingProcessor.handleActivityResult的第932行——这说明库在处理Google Play返回的购买响应时,拿到了一个预期外的null值,直接去解析导致崩溃。

下面给你几个具体的排查方向和解决方案:

1. 补全BillingProcessor初始化的许可证密钥

你初始化BillingProcessor的代码是这样的:

bp = BillingProcessor.newBillingProcessor(this, null, this);

第二个参数是你在Google Play Console里获取的应用内结算许可证密钥。虽然测试内购官方文档说不需要密钥,但部分版本的BillingProcessor库对这个参数的null情况处理不完善,会导致后续解析响应时出错。建议你把正确的密钥填进去(从Google Play Console的「应用内结算」页面复制),再重新测试。

2. 升级BillingProcessor到最新稳定版

这个空指针看起来像是库本身的边界处理bug——当Google Play返回的响应数据不完整或者为空时,库没有做null判断就直接进行JSON解析。如果你用的是较旧版本的库,大概率已经有开发者反馈并修复了这个问题,升级到最新版应该能解决。

3. 加日志确认返回的Intent数据是否正常

你可以在onActivityResult里加一些日志,看看Google Play返回的data Intent是否正常,有没有缺失关键数据:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    Log.d("BillingDebug", "请求码: " + requestCode + ", 结果码: " + resultCode + ", 数据Intent: " + (data == null ? "为空" : data.toString()));
    if (data != null) {
        Log.d("BillingDebug", "Intent附加数据: " + data.getExtras());
    }
    if (!bp.handleActivityResult(requestCode, resultCode, data)) {
        super.onActivityResult(requestCode, resultCode, data);
    }
}

通过日志能直接确认是Google Play返回的数据有问题,还是库的解析逻辑出了问题,方便进一步定位。

4. 测试其他测试商品ID

你现在用的是android.test.canceled,可以换其他官方测试ID试试,比如android.test.purchased(模拟购买成功)或者android.test.refunded(模拟退款),看看是否同样会触发异常。如果只有特定测试ID出问题,那可能是库对该测试场景的处理有问题;如果所有测试ID都出问题,那还是回到初始化或库版本的问题上。

5. 确认生命周期处理是否正确

你的onDestroy里已经调用了bp.release(),这部分没问题,但要确保BillingProcessor是在Activity的onCreate里初始化的,并且当屏幕旋转等配置变化时,要重新初始化(或者在Manifest里给Activity加android:configChanges避免重建),不过这个和当前的空指针关联不大,但也是内购配置的常见坑,顺便提一下。

总结

最有可能的原因是初始化时没传许可证密钥,导致库无法正确解析响应;其次是库版本太旧存在bug。先补全密钥并升级库,应该能解决这个问题。

内容的提问来源于stack exchange,提问作者ArclightOne

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:07:56