Xamarin.Forms - 'jobject' 在 PushAsync 上不能是 IntPtr.Zero

Posted

技术标签:

【中文标题】Xamarin.Forms - \'jobject\' 在 PushAsync 上不能是 IntPtr.Zero【英文标题】:Xamarin.Forms - 'jobject' must not be IntPtr.Zero on PushAsyncXamarin.Forms - 'jobject' 在 PushAsync 上不能是 IntPtr.Zero 【发布时间】:2016-01-17 17:26:25 【问题描述】:

有人知道在将我的 Xamarin Forms 从 1.4 更新到 1.5 后,我收到了这个错误:

System.ArgumentException: 'jobject' 不得为 IntPtr.Zero

全栈错误:

10-19 06:47:47.893 D/Mono    ( 3675): Searching for '__android_log_print'.
10-19 06:47:47.896 I/MonoDroid( 3675): at Android.Views.ActionMode/ICallbackInvoker.n_OnActionItemClicked_Landroid_view_ActionMode_Landroid_view_MenuItem_ (intptr,intpt10-19 06:47:47.893 D/Mono    ( 3675): Probing '__android_log_print'.
10-19 06:47:47.893 D/Mono    ( 3675): Found as '__android_log_print'.
10-19 06:47:47.894 I/MonoDroid( 3675): UNHANDLED EXCEPTION:
10-19 06:47:47.896 I/MonoDroid( 3675): System.ArgumentException: 'jobject' must not be IntPtr.Zero.
10-19 06:47:47.896 I/MonoDroid( 3675): Parameter name: jobject
10-19 06:47:47.896 I/MonoDroid( 3675): at Android.Runtime.JNIEnv.CallVoidMethod (intptr,intptr) [0x00010] in /Users/builder/data/lanes/2058/58099c53/source/monodroid/src/Mono.Android/src/Runtime/JNIEnv.g.cs:546
10-19 06:47:47.896 I/MonoDroid( 3675): at Android.Views.ActionModeInvoker.Finish () [0x0002d] in /Users/builder/data/lanes/2058/58099c53/source/monodroid/src/Mono.Android/platforms/android-22/src/generated/Android.Views.ActionMode.cs:804
10-19 06:47:47.896 I/MonoDroid( 3675): at Xamarin.Forms.Platform.Android.CellAdapter.OnActionItemClicked (Android.Views.ActionMode,Android.Views.IMenuItem) <IL 0x00008, 0x00044>
10-19 06:47:47.896 I/MonoDroid( 3675): at Android.Views.ActionMode/ICallbackInvoker.n_OnActionItemClicked_Landroid_view_ActionMode_Landroid_view_MenuItem_ (intptr,intptr,intptr,intptr) [0x00019] in /Users/builder/data/lanes/2058/58099c53/source/monodroid/src/Mono.Android/platforms/android-22/src/generated/Android.Views.ActionMode.cs:89
10-19 06:47:47.896 I/MonoDroid( 3675): at (wrapper dynamic-method) object.ecb01028-fd89-41d7-b184-af818f2dde3e (intptr,intptr,intptr,intptr) <IL 0x0001d, 0x00037>
10-19 06:47:47.899 W/art     ( 3675): JNI RegisterNativeMethods: attempt to register 0 native methods for md52ce486a14f4bcd95899665e9d932190b.JavaProxyThrowable
10-19 06:47:47.900 D/AndroidRuntime( 3675): Shutting down VM

当我尝试这样做时出现:

await App.MyTabbedPageMenu.orderNavigationPage.PushAsync(new DetalhesPedidoView(webPedidoModel));

仅在 Android 上显示在 ios 上一切正常。

谢谢

【问题讨论】:

您能否再解释一下您的设置。您如何从 TabbedPageMenu 转到 NavigationPage。 嗨 @Adam 我有一个 TabbebPage 对吗?我的 App.cs 中有变量,因为我需要在我的选项卡中进行更改。每个选项卡都有一个 NavigationPage 并在 ContentPage 或 CarouselPages 内。在这种情况下,我有我的导航和标签页的实例,所以我只需要 pushAsync 我要显示的新页面,但我不知道为什么这个错误只出现在 Android 上 【参考方案1】:

感谢 Xamarin 论坛的 Torben Kruse 回答问题并解决了问题

await Task.Yield()

在推送页面之前。

更多信息:https://forums.xamarin.com/discussion/54112/jobject-must-not-be-intptr-zero-on-pushasync

【讨论】:

很高兴看到您有解决方案。那些 'jobject' 不能是 IntPtr.Zero 在 Xamarin 中很常见并且很难追踪。 Jason Smith 曾经说过,他的个人使命是解决所有这些问题 :)【参考方案2】:

await Task.Yield() 是一个有时它不起作用的选项,在我的情况下,它在收集垃圾后解决

GC.collect();

【讨论】:

以上是关于Xamarin.Forms - 'jobject' 在 PushAsync 上不能是 IntPtr.Zero的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin.Forms:Forms.Context 已过时

Xamarin.Forms 手势密码实现

Xamarin.Forms 和 Xamarin Native 有啥区别? [关闭]

如何使用 Xamarin.Forms.Maps(无 Xamarin.Forms.GoogleMaps)在地图中应用样式或更改颜色

Xamarin Forms Prism:prism ResourceDictionary 中已存在具有键“Xamarin.Forms.NavigationPage”的资源

Xamarin.Forms.Forms.Init(e) Onlaunched 中的 FileNotFoundExeception