在 Android 上创建 Worklight Client 的新实例时出现 NullPointerException

NullPointerException when creating new instance of Worklight Client on Android

我正在使用 IBM Mobile First SDK for Xamarin 开发 Xamarin.Forms 应用程序。过程调用等在共享项目中,但我在平台特定项目中创建了 Worklight 客户端的新实例。

在 iOS 上一切正常,但在 Android 上我得到 Java.Lang.NullpointerException (attempt to invoke virtual method on boolean java.lang.String.equalsIgnoreCase (java.lang.String) on a null object reference).

这就是我启动新客户的方式。我调试了它,currentActivity 不为 null,它是我项目中正确的 activity(MainActivity):

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

编辑:使用说明:

using Worklight; using Worklight.Xamarin.Android;

编辑: 我尝试按照 tutorial 中的描述在 MainActivity 中创建实例。那也不起作用,我得到了同样的异常。

调用堆栈: 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)

亚行日志: 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.access0(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)

wlclient.properties文件开头需要如下文字:

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

添加后异常消失。

注意:在此之前有一个空行。