Excepción de puntero nulo de compra de Android InApp

Yo había implementado inApp compra en mi aplicación, pero a veces me da NPE, a continuación es la pila de seguimiento. Puedo publicar el código también si alguien está interesado.

java.lang.RuntimeException: Unable to start service com.market.BillingService@48400380 with null: java.lang.NullPointerException at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3063) at android.app.ActivityThread.access$3600(ActivityThread.java:125) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2096) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:123) at android.app.ActivityThread.main(ActivityThread.java:4627) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:521) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:871) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:629) at dalvik.system.NativeStart.main(Native Method) Caused by: java.lang.NullPointerException at com.market.BillingService.handleCommand(BillingService.java:369) at com.market.BillingService.onStart(BillingService.java:359) at android.app.Service.onStartCommand(Service.java:420) at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3053) ... 10 more java.lang.NullPointerException at com.market.BillingService.handleCommand(BillingService.java:369) at com.market.BillingService.onStart(BillingService.java:359) at android.app.Service.onStartCommand(Service.java:420) at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3053) at android.app.ActivityThread.access$3600(ActivityThread.java:125) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2096) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:123) at android.app.ActivityThread.main(ActivityThread.java:4627) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:521) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:871) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:629) at dalvik.system.NativeStart.main(Native Method) 

Aquí va el código relevante

 @Override protected void onStart() { super.onStart(); ResponseHandler.register(mDungeonsPurchaseObserver); } @Override protected void onStop() { super.onStop(); ResponseHandler.unregister(mDungeonsPurchaseObserver); } @Override protected void onDestroy() { super.onDestroy(); mBillingService.unbind(); } 

Y en OnCreate ()

 mDungeonsPurchaseObserver = new WMBPurchaseObserver(mHandler); mBillingService = new BillingService(); mBillingService.setContext(BuyModel.this); ResponseHandler.register(mDungeonsPurchaseObserver); 

OnClick del botón de compra

 if (!mBillingService.checkBillingSupported()) { showDialog(DIALOG_CANNOT_CONNECT_ID); } mBillingService.requestPurchase("android.test.purchased", null); 

En tu método BillingService.java onStart guarda para la intención nula de este modo

  if (null != intent) { handleCommand(intent, startId); } 

Creo que esto es causado por la intención nula. ¡Probar!

He encontrado la forma correcta de arreglar esto. Bueno en realidad depende de cómo se mire. Si no desea que se reinicie el servicio después de que se haya ejecutado el proceso, deberá anular el comando onStartCommand y devolver START_NOT_STICKY. Me gusta esto:

 @Override public int onStartCommand(Intent intent, int flags, int startId) { handleCommand(intent, startId); return START_NOT_STICKY; } 

Consulte START_NOT_STICKY . Si desea que el servicio se reinicie cada vez que se mata, entonces la respuesta elegida es la que está para usted, ya que Android reiniciará su servicio después de que se muera con una intención nula. Una vez más, vea el enlace que proporcioné.

Oh y onStart está obsoleto.

  • Error en la facturación de Android en la aplicación, diciendo "Ya tienes una orden pendiente para este elemento".
  • Hacer donaciones a través de la facturación en la aplicación
  • Seguimiento de la facturación en la aplicación con Firebase
  • ¿Es posible tener múltiples apoyos de APK basados ​​en el país?
  • ¿Hay alternativas a usar la facturación de Google en la aplicación, como una manera de evitar la publicación de información privada?
  • Id de pedido de suscripciones de Android
  • Android Cómo obtener la lista de productos de la consola de GooglePlay
  • La opción UnManaged no está disponible en la consola de Google Play para desarrolladores
  • Facturación en la aplicación de Google Play v3 getSkuDetails () devuelve los resultados almacenados en caché incluso si se modificaron los precios de la IAP
  • Error de compra de devolución de Google IAB type = 3 subtype = 4
  • Error de facturación en la aplicación
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.