尝试调用handlePurchase()时,gdx-pay偶尔出现空指针

时间:2018-09-30 20:54:03

标签: libgdx in-app-purchase gdx-pay

java.lang.NullPointerException: Attempt to invoke interface method 'void com.badlogic.gdx.pay.PurchaseObserver.handlePurchase(com.badlogic.gdx.pay.Transaction)' on a null object reference
   at com.badlogic.gdx.pay.android.googlebilling.PurchaseManagerGoogleBilling.handlePurchase(PurchaseManagerGoogleBilling.java:243)
   at com.badlogic.gdx.pay.android.googlebilling.PurchaseManagerGoogleBilling.onPurchasesUpdated(PurchaseManagerGoogleBilling.java:209)
   at com.android.billingclient.api.BillingClientImpl$1.onReceive(BillingClientImpl.java:136)
   at com.android.billingclient.api.LocalBroadcastManager.executePendingBroadcasts(LocalBroadcastManager.java:303)
   at com.android.billingclient.api.LocalBroadcastManager.access$000(LocalBroadcastManager.java:44)
   at com.android.billingclient.api.LocalBroadcastManager$1.handleMessage(LocalBroadcastManager.java:114)
   at android.os.Handler.dispatchMessage(Handler.java:102)
   at android.os.Looper.loop(Looper.java:211)
   at android.app.ActivityThread.main(ActivityThread.java:5317)
   at java.lang.reflect.Method.invoke(Native Method)
   at java.lang.reflect.Method.invoke(Method.java:372)
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1016)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:811)

大多数时候,我的购买都成功完成,并且我的Callback上调用handlePurchase()时,一切正常。但是,有时我会从gdx-pay内部获得此异常。似乎表明观察者为空。

这是什么原因,我可以在代码中采取什么措施来防止此问题发生?

1 个答案:

答案 0 :(得分:1)

您是否正在使用dispose()方法,并且在设置新的计费客户端后是否会出现问题? 如果您使用googlebilling实施,则存在一个错误。参见gdx-pay issue 180

解决方法是:不要使用dispose()并持有计费客户端。更好的方法是使用11.4-SNAPSHOT。