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.
Para probar la facturación dentro de la aplicación en una aplicación, debe instalarla en un dispositivo con Android. No puede utilizar el emulador de Android para probar la facturación dentro de la aplicación.
http://developer.android.com/google/play/billing/billing_testing.html