tutorial purchase play library google billingclient app java android in-app-billing

java - purchase - in app billing subscription android



IabHelper.startSetup() provoca NullPointerException (3)

Es porque la lista devuelta no solo está vacía sino que en realidad es null . Puede agregar una comprobación simple si la lista es null . Por qué la implementación no devuelve una lista vacía en lugar de null está más allá de mi comprensión, pero es solo la forma en que está construida.

Cambie a esto:

List<ResolveInfo> queryIntentServices = mContext.getPackageManager().queryIntentServices(serviceIntent, 0); if (queryIntentServices != null && !queryIntentServices.isEmpty()) { // service available to handle that Intent mContext.bindService(serviceIntent, mServiceConn, Context.BIND_AUTO_CREATE); }

Esto al menos hizo el truco para mí con el emulador. Esto no es necesario en un dispositivo real si se implementa correctamente.

Mi aplicación usa In App Billing y funciona bien en mi teléfono ( Android 2.3.6 ). Pero cuando lo ejecuto en el emulador ( Android 4.4.2 ) sigue fallando al crear el ayudante para realizar compras en la aplicación. NullPointerException una NullPointerException :

mHelper = new IabHelper(MainActivity.this, base64EncodedPublicKey); mHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() { public void onIabSetupFinished(IabResult result) { if (!result.isSuccess()) { Log.d("x", "In-app Billing setup failed: " + result); } else { Log.d("x", "In-app Billing is set up OK"); } } });

Esta respuesta dice que debo poner el código anterior en un bloque de prueba y poner el retén en la respuesta debajo de él. Recibo un error al hacer eso y la solución recomendada es poner eso también en un bloque try-catch. Aunque hice eso, todavía se bloquea.

¿Alguien puede decirme cómo hacer esto? Estoy completamente atascado.

Traza de pila

12-24 10:59:51.908: E/AndroidRuntime(2273): FATAL EXCEPTION: main 12-24 10:59:51.908: E/AndroidRuntime(2273): Process: com.sandradiependaal.mediatie, PID: 2273 12-24 10:59:51.908: E/AndroidRuntime(2273): java.lang.NullPointerException 12-24 10:59:51.908: E/AndroidRuntime(2273): at com.sandradiependaal.meditatie.util.IabHelper.startSetup(IabHelper.java:267) 12-24 10:59:51.908: E/AndroidRuntime(2273): at com.sandradiependaal.meditatie.MainActivity$4.onItemClick(MainActivity.java:142) 12-24 10:59:51.908: E/AndroidRuntime(2273): at android.widget.AdapterView.performItemClick(AdapterView.java:299) 12-24 10:59:51.908: E/AndroidRuntime(2273): at android.widget.AbsListView.performItemClick(AbsListView.java:1113) 12-24 10:59:51.908: E/AndroidRuntime(2273): at android.widget.AbsListView$PerformClick.run(AbsListView.java:2904) 12-24 10:59:51.908: E/AndroidRuntime(2273): at android.widget.AbsListView$3.run(AbsListView.java:3638) 12-24 10:59:51.908: E/AndroidRuntime(2273): at android.os.Handler.handleCallback(Handler.java:733) 12-24 10:59:51.908: E/AndroidRuntime(2273): at android.os.Handler.dispatchMessage(Handler.java:95) 12-24 10:59:51.908: E/AndroidRuntime(2273): at android.os.Looper.loop(Looper.java:136) 12-24 10:59:51.908: E/AndroidRuntime(2273): at android.app.ActivityThread.main(ActivityThread.java:5017) 12-24 10:59:51.908: E/AndroidRuntime(2273): at java.lang.reflect.Method.invokeNative(Native Method) 12-24 10:59:51.908: E/AndroidRuntime(2273): at java.lang.reflect.Method.invoke(Method.java:515) 12-24 10:59:51.908: E/AndroidRuntime(2273): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 12-24 10:59:51.908: E/AndroidRuntime(2273): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 12-24 10:59:51.908: E/AndroidRuntime(2273): at dalvik.system.NativeStart.main(Native Method)

IabHelper.java:

Intent serviceIntent = new Intent("com.android.vending.billing.InAppBillingService.BIND"); serviceIntent.setPackage("com.android.vending"); if (!mContext.getPackageManager().queryIntentServices(serviceIntent, 0).isEmpty()) { // service available to handle that Intent mContext.bindService(serviceIntent, mServiceConn, Context.BIND_AUTO_CREATE); }


Esto parece ser un hilo viejo. Espero que esta respuesta ayude a alguien que enfrenta el problema más adelante. BI estoy enfrentando el mismo problema en este momento.

IAB ayudante IAB genera NPE en startSetup() solo en el emulador. Pero esto sucede solo en los AVD creados con Android xxx como destino.

Intenta crear tu AVD con la API de Google como objetivo. IAB ayudante de IAB no se bloquea allí, pero aún no puede probar las funciones de facturación reales.