【问题标题】:Xamarin.Forms.Platform.Android.Platform+DefaultRenderer from native handleXamarin.Forms.Platform.Android.Platform+DefaultRenderer 来自本机句柄
【发布时间】:2018-10-12 08:28:00
【问题描述】:

我正在使用 xamarin 表单在 android 上开发应用程序。几天以来,我遇到了以下问题。

CurrentDomainOnUnhandledException ---> System.NotSupportedException: 无法激活类型的实例 来自本机的 Xamarin.Forms.Platform.Android.Platform+DefaultRenderer 句柄 0xbeb0861c (key_handle 0xb3a225b)。 ---> System.MissingMethodException:找不到构造函数 Xamarin.Forms.Platform.Android.Platform+DefaultRenderer::.ctor(System.IntPtr, Android.Runtime.JniHandleOwnership) ---> Java.Interop.JavaLocationException:类型异常 'Java.Interop.JavaLocationException' 被抛出。 05-02 14:36:57.973 I/mono-stdout(16628): System.Exception: CurrentDomainOnUnhandledException ---> System.NotSupportedException: 无法激活类型的实例 来自本机的 Xamarin.Forms.Platform.Android.Platform+DefaultRenderer 句柄 0xbeb0861c (key_handle 0xb3a225b)。 ---> System.MissingMethodException:找不到构造函数 Xamarin.Forms.Platform.Android.Platform+DefaultRenderer::.ctor(System.IntPtr, Android.Runtime.JniHandleOwnership) ---> Java.Interop.JavaLocationException:类型异常 'Java.Interop.JavaLocationException' 被抛出。 --- 内部结束 异常堆栈跟踪 --- 05-02 14:36:57.975 I/mono-stdout(16628):
--- 内部异常堆栈跟踪结束 --- 在 Java.Interop.TypeManager.CreateProxy (System.Type type, System.IntPtr 句柄,Android.Runtime.JniHandleOwnership 转移)[0x00054] in :0 05-02 14:36:57.978 I/mono-stdout(16628):在 Java.Interop.TypeManager.CreateProxy (System.Type 类型,System.IntPtr 句柄, Android.Runtime.JniHandleOwnership transfer) [0x00054] in :0 在 Java.Interop.TypeManager.CreateInstance(System.IntPtr 句柄, Android.Runtime.JniHandleOwnership 转移,System.Type targetType) [0x00111] 在:0 05-02 14:36:57.980 I/mono-stdout(16628):在 Java.Interop.TypeManager.CreateInstance (System.IntPtr句柄,Android.Runtime.JniHandleOwnership转移, System.Type targetType) [0x00111] in :0 --- 内部异常结束 堆栈跟踪 --- 05-02 14:36:57.982 I/mono-stdout(16628): --- 结束 内部异常堆栈跟踪 --- 在 Java.Interop.TypeManager.CreateInstance(System.IntPtr 句柄, Android.Runtime.JniHandleOwnership 转移,System.Type targetType) [0x0017d] 在:0 05-02 14:36:57.984 I/mono-stdout(16628):在 Java.Interop.TypeManager.CreateInstance (System.IntPtr句柄,Android.Runtime.JniHandleOwnership转移, System.Type targetType) [0x0017d] in :0 在 Java.Lang.Object.GetObject (System.IntPtr句柄,Android.Runtime.JniHandleOwnership转移, System.Type 类型)[0x000b9] in :0 05-02 14:36:57.986 I/单标准输出(16628):在 Java.Lang.Object.GetObject(System.IntPtr 句柄, Android.Runtime.JniHandleOwnership 转移,System.Type 类型) [0x000b9] 在 :0 处 Java.Lang.Object._GetObject[T](System.IntPtr 句柄, Android.Runtime.JniHandleOwnership 转移)[0x00017] in :0 05-02 14:36:57.988 I/mono-stdout(16628):在 Java.Lang.Object._GetObject[T] (System.IntPtr句柄,Android.Runtime.JniHandleOwnership转移) [0x00017] 在:0

在 Java.Lang.Object.GetObject[T](System.IntPtr 句柄, Android.Runtime.JniHandleOwnership 转移)[0x00000] in :0 在 Java.Lang.Object.GetObject[T] (System.IntPtr jnienv, System.IntPtr 句柄,Android.Runtime.JniHandleOwnership 转移)[0x00006] in :0 在 Android.Views.View.n_DispatchTouchEvent_Landroid_view_MotionEvent_ (System.IntPtr jnienv, System.IntPtr native__this, System.IntPtr native_e) [0x00000] in :0 at (包装动态方法) System.Object:3943ee27-49d5-404c-b2ef-5f107b52e084 (intptr,intptr,intptr) --- 内部异常堆栈跟踪结束

【问题讨论】:

  • 如果有人帮我解决这个问题,我真的很感激。
  • 您能提供您的代码示例吗?你知道,没有任何东西很难猜测,只是一个错误。另外,您是否尝试过删除 bin 和 obj?你尝试过做什么?
  • 这是一个奇怪的问题。我通过进行以下更改解决了这个问题。

标签: android xamarin xamarin.forms xamarin.android


【解决方案1】:
  1. 我在这个问题上做了很多研究工作。我知道当系统调用 GC 时,它会收集所有对象,如托管对象、非托管对象、对等对象。对等对象是 PCL 中使用的本机对象。当这些对象为空时,系统不知道它需要再次创建这些对象。所以应该告诉系统你需要创建对象。

只需将构造函数添加到所有自定义渲染器即可完成。 public CustomEntryImageRenderer(IntPtr handle, JniHandleOwnership transfer) { }

  1. 我将所有控件更改为自定义渲染器,并为所有渲染器添加了此构造函数。

  2. 如果您正在使用任何 rg 插件弹出窗口,请将动画设置为 false。

4.将以下覆盖方法添加到您的自定义渲染器列表视图中。

    protected override void Dispose(bool disposing)
    {

        Xamarin.Forms.Device.BeginInvokeOnMainThread(base.Dispose);

    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-09-26
    • 2012-06-06
    • 1970-01-01
    • 2021-12-18
    • 2018-07-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多