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:
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)
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)
@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-#endifin 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.