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

Gdx-pay occasional null pointer when it tries to call handlePurchase()

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.onReceive(BillingClientImpl.java:136)
   at com.android.billingclient.api.LocalBroadcastManager.executePendingBroadcasts(LocalBroadcastManager.java:303)
   at com.android.billingclient.api.LocalBroadcastManager.access[=10=]0(LocalBroadcastManager.java:44)
   at com.android.billingclient.api.LocalBroadcastManager.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)

大多数时候我的购买都成功完成并且 handlePurchase() 在我的回调上被调用,一切正常。但偶尔我会从 gdx-pay 内部得到这个异常。这似乎表明观察者为空。

这是什么原因,我可以在我的代码中做些什么来避免这个问题吗?

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

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