Excepción: No se puede iniciar la operación asíncrona (actualizar el inventario) porque otra operación asíncrona (launchPurchaseFlow) está en curso

Sí, hay dos respuestas comunes a este problema:

Uno: Un hack donde se llama a billingHelper.flagEndAsync(); Antes de iniciar una operación asíncrona. Esto generalmente se considera como no recomendado, y no resuelve el problema en muchos casos.

Dos: Llamar el método handleActivityResult del handleActivityResult en handleActivityResult de la actividad. El problema con esta solución (además de no entender el propósito de este método) es que en mi aplicación las operaciones de facturación en la aplicación se realizan en la clase Application de la aplicación, porque hay un montón de actividades en la aplicación donde un usuario puede activar Una compra en la aplicación y múltiples posibles puntos de entrada donde la aplicación necesita consultar el inventario de compras en la aplicación. Así que traté de poner:

 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (!MyApplication.myAppInstance.mHelper.handleActivityResult(requestCode, resultCode, data)) super.onActivityResult(requestCode, resultCode, data); } 

En cada actividad donde un usuario podría iniciar una compra, pero esto no ha resuelto los accidentes. Realmente no entiendo el propósito de este material de OnActivityResult, así que probablemente no entendí cómo se supone que se implementará. ¿Por qué Google quiere forzarme a hacer operaciones de facturación en la aplicación de una actividad de todos modos?

2 Solutions collect form web for “Excepción: No se puede iniciar la operación asíncrona (actualizar el inventario) porque otra operación asíncrona (launchPurchaseFlow) está en curso”

Tuve un problema similar. Desafortunadamente el código IabHelper no es genial … es en su mayoría bueno, pero el modelo de subprocesos es un poco desordenado, lo que significa que puede llegar a ser confuso cómo manejar correctamente los casos de borde.

Una manera fácil de deshacerse de los accidentes es simplemente envolver la llamada al método con un cheque if-statement como:

 if (!mHelper.isAsyncInProgress()) { mHelper.launchPurchaseFlow(...); } 

Una mejor solución sería reescribir el código IabHelper desde cero … pero en este caso en particular la excepción ocurre tan rara vez que probablemente no vale la pena. Lamentablemente no hay una solución fácil en este caso … el código de ejemplo IabHelper no es el más grande y la mayoría de nosotros sólo decidirá vivir con él.

Tener una bandera para lanzarPurchaseFlow ignora varios lanzamientos de flujo de compra. Pero, por desgracia, esto falla si el usuario hace clic en el botón Atrás por error de Google In App Billing serviceIntent. Bandera debe restablecerse a false en este caso. De lo contrario, el usuario no podrá intentar comprar de nuevo.

 if(!mHelper.isAsyncInProgress()) { mHelper.launchPurchaseFlow(...); } // Invoke below method to reset onBackPressed public static void resetAsyncInProgress() { mHelper.setAsyncInProgress(false); } 
  • Problema de compra de Android InApp (-1002: Respuesta incorrecta recibida)
  • Contrarreloj para compras únicas con facturación en aplicaciones de Google Play
  • Lista oficial de países para la aplicación de facturación Android?
  • Información de la cuenta asociada con una instalación de la aplicación
  • Facturación de InApp: java.lang.SecurityException Requiere READ_PHONE_STATE
  • ¿Cuáles son las posibilidades de obtener este código de error 3 en la compra de InApp?
  • Reembolso a la compra de aplicaciones en Android
  • Cambiar el precio del elemento de compra en la aplicación después de publicar android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.