Android应用商店结算时崩溃:BillingClient.launchBillingFlow。

7
尝试在应用内启动计费时,遇到以下错误信息:
java.lang.NullPointerException: 尝试在空对象引用上调用虚拟方法'java.lang.String android.content.Intent.getStringExtra(java.lang.String)'
代码很简单。用户选择一个项目,我将该项目传递给querySkuDetailsAsync函数。我获取并查看结果。由于API原因,随后我调用...
SkuDetails skuDetails = new SkuDetails(skuDetails.getOriginalJSON());
BillingFlowParams flowParams = BillingFlowParams.newBuilder().setSkuDetails(skuDetails).build();
BillingResult billingResult = client.launchBillingFlow(activity, flowParams);

然后,大部分时间我都会得到NPE(NullPointerException)。之前一切正常,我不知道是什么变化导致了这个问题。

请注意,我已经尝试直接传递skuDetails以排除JSON的问题,但它并没有起作用。

计费库不是开源的,因此我无法解决这个问题。


我从未遇到过这个问题,但我只会直接传递从querySkuDetails获取的SkuDetails实例。你能发布完整的堆栈跟踪吗? - Tenfour04
1个回答

15
我找到了一个解决方案。如果在调用“launchBillingFlow”之前调用activity.setIntent(new Intent()),该错误就会消失。看起来是现在关闭的计费库中的一个漏洞。

1
谢谢!我也遇到了同样的问题,下次应用更新时我会尝试这个方法(在activity.intent上添加一个null-check)。看起来非常可行,因为launchBillingFlow(你可以在Android Studio中轻松反编译)在查找intent extra“PROXY_PACKAGE”时没有先进行intent的null-check。你已经向Google报告了这个问题吗? - mattlaabs
4
我还没有报告这个问题。我在向谷歌和报告错误方面运气很差。除非我生成完整的错误报告,为他们构建一个示例应用程序并飞到旧金山亲自展示如何重现问题,否则他们可能会拒绝承认该问题。 - Justin
1
我明白了! 你的修复使我的应用程序崩溃问题已经解决。再次感谢! - mattlaabs
1
看来这仍然是个问题。你的修复方法帮了我,谢谢!在Kotlin中,在调用launchBillingFlow之前,请执行“activity.intent = Intent()”。 - JTODR

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接