找不到...的构造函数(System.IntPtr,Android.Runtime.JniHandleOwnership)

Hag*_*i L 8 xamarin.android xamarin

在过去的几天里,我开始收到上述错误.
不是在这里那里,而是在各处.在某些地方,我甚至无法将这个奇怪的构造函数放入其中,就像下面的调用堆栈一样.

我在/sf/answers/742260011/中看到了答案,但我相信这不是我的情况.它只是开始发生在任何地方.特别是当我提出断点时.

这是一个例子:

10-26 15:34:58.895 E/mono-rt (13841): [ERROR] FATAL UNHANDLED EXCEPTION: System.NotSupportedException: Unable to activate instance of type Android.Views.View+IOnClickListenerImplementor from native handle 7960001d ---> System.MissingMethodException: No constructor found for Android.Views.View+IOnClickListenerImplementor::.ctor(System.IntPtr, Android.Runtime.JniHandleOwnership) ---> Java.Interop.JavaLocationException: Exception of type 'Java.Interop.JavaLocationException' was thrown.
10-26 15:34:58.895 E/mono-rt (13841): Java.Lang.Error: Exception of type 'Java.Lang.Error' was thrown.
10-26 15:34:58.895 E/mono-rt (13841): 
10-26 15:34:58.895 E/mono-rt (13841):   --- End of managed exception stack trace ---
10-26 15:34:58.895 E/mono-rt (13841): java.lang.Error: Java callstack:
10-26 15:34:58.895 E/mono-rt (13841):   at mono.android.view.View_OnClickListenerImplementor.n_onClick(Native Method)
10-26 15:34:58.895 E/mono-rt (13841):   at mono.android.view.View_OnClickListenerImplementor.onClick(View_OnClickListenerImplementor.java:29)
10-26 15:34:58.895 E/mono-rt (13841):   at android.view.View.performClick(View.java:4475)
10-26 15:34:58.895 E/mono-rt (13841):   at android.view.View$PerformClick.run(View.java:18786)
10-26 15:34:58.895 E/mono-rt (13841):   at android.os.Handler.handleCallback(Handler.java:730)
10-26 15:34:58.895 E/mono-rt (13841):   at android.os.Handler.dispatchMessage(Handler.java:92)
10-26 15:34:58.895 E/mono-rt (13841):   at android.os.Looper.loop
Run Code Online (Sandbox Code Playgroud)

For*_*gic 6

根据我的经验,当应用程序运行时从内存中释放对象时会发生这种情况.然后,例如,如果您返回到该页面并且该对象需要由Mono重新创建,则需要指定该构造函数.

您指John Pryor 答案应该是您问题的答案.重要的部分如下:

因此,Mono for Android通过(IntPtr,JniHandleOwnership)构造函数创建了相应类型的实例,如果找不到此构造函数则会生成错误.

一旦(在这种情况下)TextView构造函数完成执行,LogTextBox的ACW构造函数将执行,此时Mono for Android将变为"啊哈!我们已经为这个Java实例创建了一个C#实例",然后将调用相应的已创建的实例上的构造函数.这意味着对于单个实例,将执行两个构造函数:(IntPtr,JniHandleOwnership)构造函数,以及(稍后)(Context,IAttributeSet,int)构造函数.

我想成为更好的帮助,但没有任何代码片段,很难说.尝试查看实现查看的对象IOnClickListenerImplementor是否可以在侦听器的实现中添加构造函数....祝你好运

  • 3年后,我正面临着这个问题.Xamarin网站的这段文档帮助了--__Premature Dispose()调用JNI句柄和相应的C#实例之间存在映射.Java.Lang.Object.Dispose()打破了这个映射.如果JNI句柄在映射被破坏后进入托管代码,它看起来像Java Activation,并且将检查并调用(IntPtr,JniHandleOwnership)构造函数.如果构造函数不存在,则抛出异常.__ https://developer.xamarin.com/guides/android/under_the_hood/architecture/#Premature_Dispose()_Calls (4认同)