Search code examples
xamarinibm-mobilefirst

NullPointerException when creating new instance of Worklight Client on Android


I am developing a Xamarin.Forms app with the IBM Mobile First SDK for Xamarin. The procedure calls etc. are in a shared project, but I create a new instance of the Worklight client in the platform specific projects.

Everything works fine on iOS, but on Android I get a Java.Lang.NullpointerException (attempt to invoke virtual method on boolean java.lang.String.equalsIgnoreCase (java.lang.String) on a null object reference).

This is how I initiate my new client. I debugged it and the currentActivity is not null, it's the correct activity (the MainActivity) in my project:

private IWorklightClient InitiateNewClient() { var currentActivity = (Activity)Xamarin.Forms.Forms.Context; return WorklightClient.CreateInstance(currentActivity); // crashes on this line }

edit: usings for clarification:

using Worklight; using Worklight.Xamarin.Android;

edit: I tried creating the instance in the MainActivity as described in the tutorial. That didn't work either and I got the same exception.

Call stack: System.Diagnostics.Debugger.Mono_UnhandledException_internal() in System.Diagnostics.Debugger.Mono_UnhandledException( Parameters) in /Users/builder/data/lanes/3236/ee215fc9/source/mono/mcs/class/corlib/System.Diagnostics/Debugger.cs:122 object.938810a8-0432-4952-a74e-f21f472a7ee6( Parameters) in System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw( Parameters) in /Users/builder/data/lanes/3236/ee215fc9/source/mono/external/referencesource/mscorlib/system/runtime/exceptionservices/exceptionservicescommon.cs:143 Android.Runtime.JNIEnv.CallStaticObjectMethod( Parameters) in /Users/builder/data/lanes/3236/ee215fc9/source/monodroid/src/Mono.Android/src/Runtime/JNIEnv.g.cs:1301 Worklight.Android.WLClient.CreateInstance( Parameters) in Worklight.Xamarin.Android.WorklightClient.CreateInstance( Parameters) in MyGlass.Droid.MainActivity.OnCreate( bundle) in /Users/sam/Code/AGC/MyGlass/Droid/MainActivity.cs:21 Android.Support.V4.App.FragmentActivity.n_OnCreate_Landroid_os_Bundle_( Parameters) in object.938810a8-0432-4952-a74e-f21f472a7ee6( Parameters)

ADB log: 05-31 16:33:57.949: I/MonoDroid(8434): Java.Lang.NullPointerException: Exception of type 'Java.Lang.NullPointerException' was thrown. 05-31 16:33:57.949: I/MonoDroid(8434): at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000c] in /Users/builder/data/lanes/3236/ee215fc9/source/mono/external/referencesource/mscorlib/system/runtime/exceptionservices/exceptionservicescommon.cs:143 05-31 16:33:57.949: I/MonoDroid(8434): at Android.Runtime.JNIEnv.CallStaticObjectMethod (IntPtr jclass, IntPtr jmethod, Android.Runtime.JValue* parms) [0x00064] in /Users/builder/data/lanes/3236/ee215fc9/source/monodroid/src/Mono.Android/src/Runtime/JNIEnv.g.cs:1301 05-31 16:33:57.949: I/MonoDroid(8434): at Worklight.Android.WLClient.CreateInstance (Android.Content.Context context) [0x00047] in <filename unknown>:0 05-31 16:33:57.949: I/MonoDroid(8434): at Worklight.Xamarin.Android.WorklightClient.CreateInstance (Android.App.Activity activity) [0x00017] in <filename unknown>:0 05-31 16:33:57.949: I/MonoDroid(8434): at MyGlass.Droid.MainActivity.OnCreate (Android.OS.Bundle bundle) [0x00029] in /Users/sam/Code/AGC/MyGlass/Droid/MainActivity.cs:21 05-31 16:33:57.949: I/MonoDroid(8434): at Android.Support.V4.App.FragmentActivity.n_OnCreate_Landroid_os_Bundle_ (IntPtr jnienv, IntPtr native__this, IntPtr native_savedInstanceState) [0x00011] in <filename unknown>:0 05-31 16:33:57.949: I/MonoDroid(8434): at (wrapper dynamic-method) System.Object:b1885f8e-04c1-4d07-a98e-7fc5ce5bb2bb (intptr,intptr,intptr) 05-31 16:33:57.949: I/MonoDroid(8434): --- End of managed exception stack trace --- 05-31 16:33:57.949: I/MonoDroid(8434): java.lang.NullPointerException 05-31 16:33:57.949: I/MonoDroid(8434): at com.worklight.wlclient.HttpClientManager.<init>(HttpClientManager.java:86) 05-31 16:33:57.949: I/MonoDroid(8434): at com.worklight.wlclient.HttpClientManager.createInstance(HttpClientManager.java:270) 05-31 16:33:57.949: I/MonoDroid(8434): at com.worklight.wlclient.api.WLClient.createInstance(WLClient.java:231) 05-31 16:33:57.949: I/MonoDroid(8434): at md593d7a1b553c54e508e0c912cf48ed7a6.MainActivity.n_onCreate(Native Method) 05-31 16:33:57.949: I/MonoDroid(8434): at md593d7a1b553c54e508e0c912cf48ed7a6.MainActivity.onCreate(MainActivity.java:28) 05-31 16:33:57.949: I/MonoDroid(8434): at android.app.Activity.performCreate(Activity.java:5541) 05-31 16:33:57.949: I/MonoDroid(8434): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1093) 05-31 16:33:57.949: I/MonoDroid(8434): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2368) 05-31 16:33:57.949: I/MonoDroid(8434): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2464) 05-31 16:33:57.949: I/MonoDroid(8434): at android.app.ActivityThread.access$900(ActivityThread.java:172) 05-31 16:33:57.949: I/MonoDroid(8434): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1308) 05-31 16:33:57.949: I/MonoDroid(8434): at android.os.Handler.dispatchMessage(Handler.java:102) 05-31 16:33:57.949: I/MonoDroid(8434): at android.os.Looper.loop(Looper.java:146) 05-31 16:33:57.949: I/MonoDroid(8434): at android.app.ActivityThread.main(ActivityThread.java:5653) 05-31 16:33:57.949: I/MonoDroid(8434): at java.lang.reflect.Method.invokeNative(Native Method) 05-31 16:33:57.949: I/MonoDroid(8434): at java.lang.reflect.Method.invoke(Method.java:515) 05-31 16:33:57.949: I/MonoDroid(8434): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1291) 05-31 16:33:57.949: I/MonoDroid(8434): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1107) 05-31 16:33:57.949: I/MonoDroid(8434): at dalvik.system.NativeStart.main(Native Method) 05-31 16:33:58.039: W/dalvikvm(8434): JNI WARNING: JNI function CallObjectMethod called with exception pending 05-31 16:33:58.039: W/dalvikvm(8434): in Lmd593d7a1b553c54e508e0c912cf48ed7a6/MainActivity;.n_onCreate:(Landroid/os/Bundle;)V (CallObjectMethod)


Solution

  • The wlclient.properties file needs the following text at the beginning:

    # Licensed Materials - Property of IBM
    # 5725-I43 (C) Copyright IBM Corp. 2011, 2013. All Rights Reserved.
    # US Government Users Restricted Rights - Use, duplication or
    # disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
    

    The exception dissappears when this is added.

    NB: precede this with an empty line.