C# xamarin.forms中的构造函数出错

C# xamarin.forms中的构造函数出错,c#,android,xamarin,xamarin.forms,C#,Android,Xamarin,Xamarin.forms,有人知道我的盒子渲染器构造函数有什么问题吗? 有时会出现以下错误: System.NullReferenceException:对象引用未设置为对象的实例 04-04 12:39:20.507 D/Mono(5408):DllImport正在尝试加载:'/system/lib/liblog.so'。 04-04 12:39:20.507d/Mono(5408):DllImport加载的库'/system/lib/liblog.so'。 04-04 12:39:20.507d/Mono(5408)

有人知道我的盒子渲染器构造函数有什么问题吗? 有时会出现以下错误:

System.NullReferenceException:对象引用未设置为对象的实例

04-04 12:39:20.507 D/Mono(5408):DllImport正在尝试加载:'/system/lib/liblog.so'。 04-04 12:39:20.507d/Mono(5408):DllImport加载的库'/system/lib/liblog.so'。 04-04 12:39:20.507d/Mono(5408):DllImport在“/system/lib/liblog.so”(“/system/lib/liblog.so”)中搜索。 04-04 12:39:20.507d/Mono(5408):搜索“\uuuuAndroid\uLog\uPrint”。 04-04 12:39:20.507d/Mono(5408):探测“机器人日志打印”。 04-04 12:39:20.507d/Mono(5408):发现为“\uuuuAndroid\uLog\uPrint”。 04-04 12:39:20.517 I/MonoDroid(5408):未处理的异常: 04-04 12:39:20.537 I/MonoDroid(5408):System.NullReferenceException:对象引用未设置为对象的实例。 04-04 12:39:20.537 I/MonoDroid(5408):位于Xamarin.Forms.Platform.Android.MotionEventHelper.HandleMotionEvent(Android.Views.IViewParent父级,Android.Views.MotionEvent MotionEvent)[0x00000],位于D:\agent\u work\1\s\Xamarin.Forms.Platform.Android\renders\MotionEventHelper.cs:12 04-04 12:39:20.547 I/MonoDroid(5408):位于Xamarin.Forms.Platform.Android.BoxRenderer.OnTouchEvent(Android.Views.MotionEvent e)[0x0000b],位于D:\agent\u work\1\s\Xamarin.Forms.Platform.Android\Renderers\BoxRenderer.cs:29 04-04 12:39:20.547 I/MonoDroid(5408):在Android.Views.View.n_ontochevent_Landroid_View_MotionEvent_(System.IntPtr jnienv,System.IntPtr native__this,System.IntPtr native__e)[0x0000f]in:0 04-04 12:39:20.547 I/MonoDroid(5408):at(包装器动态方法)系统。对象:eb4269e7-cbad-45d7-bb9d-dbefa879d3e2(intptr、intptr、intptr) 04-04 12:39:20.577 W/art(5408):JNI RegisterNativeMethods:尝试为android.runtime.JavaProxyThrowable注册0个本机方法 04-04 12:39:20.577 D/Mono(5408):DllImport在以下位置搜索:“_Internal”(“(null)”)。 04-04 12:39:20.577d/Mono(5408):搜索“java_interop_jnienv_throw”。 04-04 12:39:20.577 D/Mono(5408):探测“java_interop_jnienv_throw”。 04-04 12:39:20.577 D/Mono(5408):被发现为“java_interop_jnienv_throw”。 未处理的异常:

System.NullReferenceException:对象引用未设置为对象的实例

04-04 12:39:22.407 I/MonoDroid(5408):未处理的异常: 04-04 12:39:22.447 I/MonoDroid(5408):System.NullReferenceException:对象引用未设置为对象的实例。 04-04 12:39:22.447 I/MonoDroid(5408):at(包装器动态方法)系统。对象:eb4269e7-cbad-45d7-bb9d-dbefa879d3e2(intptr、intptr、intptr) 04-04 12:39:22.447 I/MonoDroid(5408):at(包装器管理为本机)Java.Interop.NativeMethods:Java_Interop_jnienv_call_nonvirtual_boolean_method_a(intptr,intptr&,intptr,intptr,intptr,intptr,intptr,Java.Interop.JniArgumentValue*) 04-04 12:39:22.447 I/MonoDroid(5408):在Java.Interop.jnienEnvironment+InstanceMethods.CallNonvirtualBooleanMethod(Java.Interop.JniObjectReference实例,Java.Interop.JniObjectReference类型,Java.Interop.JniMethodInfo方法,Java.Interop.JniArgumentValue*args)[0x00073]in:0 04-04 12:39:22.447 I/MonoDroid(5408):在Java.Interop.jnipermembers+JniInstanceMethods.InvokeVirtualBooleanMethod(System.String encodedMember,Java.Interop.IJavaPeerable self,Java.Interop.JniArgumentValue*参数)[0x0005d]in:0 04-04 12:39:22.447 I/MonoDroid(5408):在Android.Views.View.DispatchTouchEvent(Android.Views.MotionEvent e)[0x00031]中:0 04-04 12:39:22.447 I/MonoDroid(5408):位于Xamarin.Forms.Platform.Android.VisualElementRenderer`1[TElement].DispatchTouchEvent(Android.Views.MotionEvent e)[0x0000a],位于D:\agent\u work\1\s\Xamarin.Forms.Platform.Android\VisualElementRenderer.cs:63 04-04 12:39:22.447 I/MonoDroid(5408):在Android.Views.View.n_DispatchTouchEvent_Landroid_View_MotionEvent_(System.IntPtr jnienv,System.IntPtr native__this,System.IntPtr native__e)[0x0000f]in:0 04-04 12:39:22.447 I/MonoDroid(5408):at(包装器动态方法)系统。对象:186516ab-cbd3-43fb-877a-82DB704B877(intptr、intptr、intptr)

这是我在android项目中的代码:

using System;
using System.Collections.Generic;

using Android.Runtime;
using neoFly_Montana.Droid;
using Xamarin.Forms;

[assembly: ExportRenderer(typeof(Xamarin.Forms.BoxView), typeof(BoxRenderer))]
 namespace neoFly_Montana.Droid
{
public class BoxRenderer : Xamarin.Forms.Platform.Android.BoxRenderer
{
    public BoxRenderer()
    { }

    protected BoxRenderer(IntPtr javaReference, JniHandleOwnership transfer) : base()
    {
        if (javaReference == null || transfer == null)
        {
            var sx = 5;
        }
    }
}
}
--------------------更新-----------------------

我试过了

[assembly: ExportRenderer(typeof(Xamarin.Forms.Label), 
typeof(NeoFly_MontanaLabelRenderer))]
namespace neoFly_Montana.Droid
{
public class NeoFly_MontanaLabelRenderer : 
Xamarin.Forms.Platform.Android.LabelRenderer
{
    public NeoFly_MontanaLabelRenderer(Context context) : base(context)
    {
        if(context == null)
        {
            var sx = 5;
        }
    }      
}
}
但是,通过使用此代码,我又看到了我在这里发布的第一个代码解决的错误:

System.NotSupportedException:无法从本机句柄0xbe99e3ac激活neoFly_Montana.Droid.BoxRenderer类型的实例

(有时像那样)

那么,现在我使用的代码是:

using System;
using System.Collections.Generic;
using Android.Content;
using Android.Runtime;
using neoFly_Montana.Droid;
using Xamarin.Forms;

[assembly: ExportRenderer(typeof(Xamarin.Forms.BoxView), typeof(BoxRenderer))]
namespace neoFly_Montana.Droid
{
public class BoxRenderer : Xamarin.Forms.Platform.Android.BoxRenderer
{
    public BoxRenderer(Context context) : base(context)
    {
        if(context == null)
        {
            var sx = 5;
        }
    }

    protected BoxRenderer(IntPtr javaReference, JniHandleOwnership transfer) : base()
    {
        if (javaReference == null || transfer == null)
        {
            var sx = 5;
        }
    }
}
}

使用第二个构造函数,无法激活。。。错误停止,但空引用仍在此处。

您应该创建一个名为CustomBoxView的类,该类从BoxView中扩展,然后放入
[assembly:ExportRenderer(typeof(CustomBoxView),typeof(BoxRenderer))]
您使用的是什么版本的Xamarin.Forms?如果是2.5+,则不应使用参数为零的BoxRenderer构造函数。要扩展@DavidS刚才所说的内容,应使用带有
上下文
参数的构造函数。你可以看到它是如何在中完成的,也就是说,如果你使用的是Xamarin.Forms 2.5+,我使用的是Xamarin.Forms 2.5+。一个问题:如果我遵循您的示例,我需要创建一个类,“MyBoxView”,例如在我的PCL项目中,对吗?…然后在我的xaml中使用这个组件…我不能直接使用“(typeof(Xamarin.Forms.BoxView)”而不是创建一个类吗?