InAppBillingPlugin: NRE on ConnectAsync() call

@jamesmontemagno … Thanks for producing this plugin.

I think it’s working on iOS. It worked with a hardwired iPhone (sandbox). ~I’m waiting on feedback from a Test Flight tester to see if the published release build works on iOS.~ [EDIT] Yes, works fine on iOS in Test Flight.

On the Android side, I’m getting an NRE on the ConnectAsync() line:

capture3

Idk how to debug it. Can you provide guidance on what to do next?

Bug

Version Number of Plugin: 1.1.0.23-beta Device Tested On: Alcatel A460T (PIXI3_4TF) Simulator Tested On: N/A

Crash Report

java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:644)
	at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.reflect.InvocationTargetException
	at java.lang.reflect.Method.invokeNative(Native Method)
	at java.lang.reflect.Method.invoke(Method.java:515)
	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:828)
	... 2 more
Caused by: android.runtime.JavaProxyThrowable: System.NullReferenceException: Object reference not set to an instance of an object
  at Plugin.InAppBilling.InAppBillingImplementation+InAppBillingServiceConnection.ConnectAsync () [0x00037] in <1ecca8595de5416485857bb67e2ec090>:0 
  at Plugin.InAppBilling.InAppBillingImplementation.ConnectAsync () [0x00000] in <1ecca8595de5416485857bb67e2ec090>:0 
  at OkayKidO.PurchaseRecallAlertsPage+<<-ctor>b__7_1>d.MoveNext () [0x00038] in <9ba60b7d2d04489bb8fa7b24e508a624>:0 
--- End of stack trace from previous location where exception was thrown ---
  at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000c] in <4320a1443daa4b43887537c6c14e77d7>:0 
  at System.Runtime.CompilerServices.AsyncMethodBuilderCore.<ThrowAsync>m__0 (System.Object state) [0x00000] in <4320a1443daa4b43887537c6c14e77d7>:0 
  at Android.App.SyncContext+<Post>c__AnonStorey0.<>m__0 () [0x00000] in <c7e72ae5f1bb4848b22a1b9d2ab62bc1>:0 
  at Java.Lang.Thread+RunnableImplementor.Run () [0x0000b] in <c7e72ae5f1bb4848b22a1b9d2ab62bc1>:0 
  at Java.Lang.IRunnableInvoker.n_Run (System.IntPtr jnienv, System.IntPtr native__this) [0x00009] in <c7e72ae5f1bb4848b22a1b9d2ab62bc1>:0 
  at (wrapper dynamic-method) System.Object:c20c090a-8004-49ef-9b1a-a7360f44a814 (intptr,intptr)
	at mono.java.lang.RunnableImplementor.n_run(Native Method)
	at mono.java.lang.RunnableImplementor.run(RunnableImplementor.java:30)
	at android.os.Handler.handleCallback(Handler.java:808)
	at android.os.Handler.dispatchMessage(Handler.java:103)
	at android.os.Looper.loop(Looper.java:193)
	at android.app.ActivityThread.main(ActivityThread.java:5335)

capture

capture1

MainActivity.cs

using Android.App;
using Android.Content;
using Android.Content.PM;
using Android.OS;
using Plugin.CurrentActivity;
using Plugin.InAppBilling;
using System;
using System.Globalization;
using Xamarin.Forms;

namespace OkayKidO.Droid
{
    [Activity(Label = "@string/app_name", Icon = "@drawable/icon", Theme = "@style/MainTheme", ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation, ScreenOrientation = ScreenOrientation.Portrait )]
    public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
    {
        public static string Version { get; set; }
        public static string Build { get; set; }

        protected override void OnCreate(Bundle bundle)
        {
            TabLayoutResource = Resource.Layout.Tabbar;
            ToolbarResource = Resource.Layout.Toolbar;

            base.OnCreate(bundle);

            Forms.Init(this, bundle);

            Version = PackageManager.GetPackageInfo(PackageName, 0).VersionName;
            Build = Convert.ToString(PackageManager.GetPackageInfo(PackageName, 0).VersionCode, CultureInfo.InvariantCulture);

            LoadApplication(new App());
        }

        public override void OnLowMemory()
        {
            GC.Collect();
        }

        protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
        {
            base.OnActivityResult(requestCode, resultCode, data);
            InAppBillingImplementation.HandleActivityResult(requestCode, resultCode, data);
        }

        public void OnActivityCreated(Activity activity, Bundle savedInstanceState)
        {
            CrossCurrentActivity.Current.Activity = activity;
        }

        public void OnActivityResumed(Activity activity)
        {
            CrossCurrentActivity.Current.Activity = activity;
        }

        public void OnActivityStarted(Activity activity)
        {
            CrossCurrentActivity.Current.Activity = activity;
        }
    }
}

packages.config

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="ExifLib.PCL" version="1.0.1" targetFramework="monoandroid70" />
  <package id="Newtonsoft.Json" version="9.0.1" targetFramework="monoandroid70" />
  <package id="Plugin.CurrentActivity" version="1.0.1" targetFramework="monoandroid70" />
  <package id="Plugin.InAppBilling" version="1.1.0.23-beta" targetFramework="monoandroid70" />
  <package id="Xamarin.Android.Support.Animated.Vector.Drawable" version="24.2.1" targetFramework="monoandroid70" />
  <package id="Xamarin.Android.Support.Compat" version="24.2.1" targetFramework="monoandroid70" />
  <package id="Xamarin.Android.Support.Core.UI" version="24.2.1" targetFramework="monoandroid70" />
  <package id="Xamarin.Android.Support.Core.Utils" version="24.2.1" targetFramework="monoandroid70" />
  <package id="Xamarin.Android.Support.Design" version="24.2.1" targetFramework="monoandroid70" />
  <package id="Xamarin.Android.Support.Fragment" version="24.2.1" targetFramework="monoandroid70" />
  <package id="Xamarin.Android.Support.Media.Compat" version="24.2.1" targetFramework="monoandroid70" />
  <package id="Xamarin.Android.Support.Transition" version="24.2.1" targetFramework="monoandroid70" />
  <package id="Xamarin.Android.Support.v4" version="24.2.1" targetFramework="monoandroid70" />
  <package id="Xamarin.Android.Support.v7.AppCompat" version="24.2.1" targetFramework="monoandroid70" />
  <package id="Xamarin.Android.Support.v7.CardView" version="24.2.1" targetFramework="monoandroid71" />
  <package id="Xamarin.Android.Support.v7.MediaRouter" version="24.2.1" targetFramework="monoandroid70" />
  <package id="Xamarin.Android.Support.v7.Palette" version="24.2.1" targetFramework="monoandroid70" />
  <package id="Xamarin.Android.Support.v7.RecyclerView" version="24.2.1" targetFramework="monoandroid70" />
  <package id="Xamarin.Android.Support.Vector.Drawable" version="24.2.1" targetFramework="monoandroid70" />
  <package id="Xamarin.Build.Download" version="0.4.2" targetFramework="monoandroid70" />
  <package id="Xamarin.Forms" version="2.3.3.193" targetFramework="monoandroid70" />
</packages>

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:installLocation="auto" android:versionName="1.1" package="com.seattlecreations.okaykido" android:versionCode="10">
	<uses-sdk android:minSdkVersion="15" />
	<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
	<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
	<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
	<uses-permission android:name="android.permission.INTERNET" />
	<uses-permission android:name="android.permission.RECORD_AUDIO" />
	<uses-permission android:name="android.permission.MICROPHONE" />
	<uses-permission android:name="com.android.vending.BILLING" />
	<application android:label="Okay Kid-O" android:icon="@drawable/icon" />
</manifest>

About this issue

  • Original URL
  • State: closed
  • Created 7 years ago
  • Comments: 28 (11 by maintainers)

Most upvoted comments

@umairali612 I posted a note on that page with “something is missing” and linking this issue to that topic. Hopefully, they’ll surface it there or somewhere that helps more folks.

Thanks mate. Was stuck on this. Was adding compiler directive #if-#else-#endif in assemblyInfo.cs. Xamarin should update its documentation on this page: https://developer.xamarin.com/guides/android/deployment,_testing,_and_metrics/publishing_an_application/part_1_-_preparing_an_application_for_release/

@GuardRex Thank you! I believe this has been the contributing factor to my issues as well. Hoping to test it out in the next day.

You can’t have those in there, put them in the Application Class

So, remove the NuGets from your app. Manually reference the .csproj for: Abstractions, Android, VendingLibrary, and the Normal InAppBilling PCL.

Add: PCL: Abstractions + InAppBillingPCL Android: Abstractions + Android + VendingLibrary.