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)
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.