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); } 
  • Prueba del producto gestionado por puchase en la aplicación
  • Error en la facturación de Android en la aplicación, diciendo "Ya tienes una orden pendiente para este elemento".
  • Facturación dentro de la aplicación - Artículo solicitado no disponible para la compra
  • Android en la aplicación: compra de complementos?
  • Facturación en la aplicación de Android: datos en blanco recibidos después de la compra
  • Verificación del lado del servidor de la compra de la versión 3 de facturación de Google Play en la aplicación (parte 2)
  • Error de facturación de Android en la aplicación: se requiere autenticación
  • Google Android en la aplicación de compras "Entrega de contenido" ¿Cómo entregar correctamente el contenido?
  • Eliminación de anuncios con compra en la aplicación
  • ¿Qué identidad de usuario debe utilizarse para recopilar las compras en la aplicación de Google Play?
  • Android In-App Billing v3: No recibe firmas
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.