Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/183.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android绑定使用EnumMethods.xml为接口定义Getter/Setter方法_Android_Xamarin_Xamarin.android - Fatal编程技术网

Android绑定使用EnumMethods.xml为接口定义Getter/Setter方法

Android绑定使用EnumMethods.xml为接口定义Getter/Setter方法,android,xamarin,xamarin.android,Android,Xamarin,Xamarin.android,我对EnumMethods.xml有问题。我将其用于一些接口,映射工作正常。但是,如果我有另一个扩展了原始接口的接口,则映射不起作用,我会得到以下错误: “无法将类型'int'隐式转换为'MyEnum'。存在显式转换(是否缺少转换?)” 及 “无法将类型'MyEnum'隐式转换为'int'。存在显式转换(是否缺少转换?)” 有什么建议吗 映射如下所示: > p>首先,让我们看一下 API .xml 定义核心.IVIEW >: <interface abstract="true" d

我对EnumMethods.xml有问题。我将其用于一些接口,映射工作正常。但是,如果我有另一个扩展了原始接口的接口,则映射不起作用,我会得到以下错误:

“无法将类型'int'隐式转换为'MyEnum'。存在显式转换(是否缺少转换?)”

“无法将类型'MyEnum'隐式转换为'int'。存在显式转换(是否缺少转换?)”

有什么建议吗

映射如下所示:



<代码> > p>首先,让我们看一下<代码> API .xml <代码>定义<代码>核心.IVIEW >:

<interface abstract="true" deprecated="not deprecated" final="false" name="IView" static="false" visibility="public">
<method abstract="true" deprecated="not deprecated" final="false" name="getVisibility" native="false" return="int" static="false" synchronized="false" visibility="public">
</method>
<method abstract="true" deprecated="not deprecated" final="false" name="setVisibility" native="false" return="void" static="false" synchronized="false" visibility="public">
<parameter name="p0" type="int">
</parameter>
</method>
</interface>
ICustomView

static Delegate cb_getVisibility;
#pragma warning disable 0169
        static Delegate GetGetVisibilityHandler ()
        {
            if (cb_getVisibility == null)
                cb_getVisibility = JNINativeWrapper.CreateDelegate ((Func<IntPtr, IntPtr, int>) n_GetVisibility);
            return cb_getVisibility;
        }

        static int n_GetVisibility (IntPtr jnienv, IntPtr native__this)
        {
            global::Dom.Core.IView __this = global::Java.Lang.Object.GetObject<global::Dom.Core.IView> (jnienv, native__this, JniHandleOwnership.DoNotTransfer);
            return (int) __this.Visibility;
        }
#pragma warning restore 0169

        static Delegate cb_setVisibility_I;
#pragma warning disable 0169
        static Delegate GetSetVisibility_IHandler ()
        {
            if (cb_setVisibility_I == null)
                cb_setVisibility_I = JNINativeWrapper.CreateDelegate ((Action<IntPtr, IntPtr, int>) n_SetVisibility_I);
            return cb_setVisibility_I;
        }

        static void n_SetVisibility_I (IntPtr jnienv, IntPtr native__this, int native_p0)
        {
            global::Dom.Core.IView __this = global::Java.Lang.Object.GetObject<global::Dom.Core.IView> (jnienv, native__this, JniHandleOwnership.DoNotTransfer);
            global::Android.Views.ViewStates p0 = (global::Android.Views.ViewStates) native_p0;
            __this.Visibility = p0;
        }
#pragma warning restore 0169

        IntPtr id_getVisibility;
        IntPtr id_setVisibility_I;
        public unsafe global::Android.Views.ViewStates Visibility {
            get {
                if (id_getVisibility == IntPtr.Zero)
                    id_getVisibility = JNIEnv.GetMethodID (class_ref, "getVisibility", "()I");
                return (global::Android.Views.ViewStates) JNIEnv.CallIntMethod (((global::Java.Lang.Object) this).Handle, id_getVisibility);
            }
            set {
                if (id_setVisibility_I == IntPtr.Zero)
                    id_setVisibility_I = JNIEnv.GetMethodID (class_ref, "setVisibility", "(I)V");
                JValue* __args = stackalloc JValue [1];
                __args [0] = new JValue ((int) value);
                JNIEnv.CallVoidMethod (((global::Java.Lang.Object) this).Handle, id_setVisibility_I, __args);
            }
        }
static Delegate cb_getVisibility;
#pragma warning disable 0169
        static Delegate GetGetVisibilityHandler ()
        {
            if (cb_getVisibility == null)
                cb_getVisibility = JNINativeWrapper.CreateDelegate ((Func<IntPtr, IntPtr, int>) n_GetVisibility);
            return cb_getVisibility;
        }

        static int n_GetVisibility (IntPtr jnienv, IntPtr native__this)
        {
            global::Dom.Common.ICustomView __this = global::Java.Lang.Object.GetObject<global::Dom.Common.ICustomView> (jnienv, native__this, JniHandleOwnership.DoNotTransfer);
            return __this.Visibility;
        }
#pragma warning restore 0169

        static Delegate cb_setVisibility_I;
#pragma warning disable 0169
        static Delegate GetSetVisibility_IHandler ()
        {
            if (cb_setVisibility_I == null)
                cb_setVisibility_I = JNINativeWrapper.CreateDelegate ((Action<IntPtr, IntPtr, int>) n_SetVisibility_I);
            return cb_setVisibility_I;
        }

        static void n_SetVisibility_I (IntPtr jnienv, IntPtr native__this, int native_value)
        {
            global::Dom.Common.ICustomView __this = global::Java.Lang.Object.GetObject<global::Dom.Common.ICustomView> (jnienv, native__this, JniHandleOwnership.DoNotTransfer);
            global::Android.Views.ViewStates value = (global::Android.Views.ViewStates) native_value;
            __this.Visibility = value;
        }
#pragma warning restore 0169

        IntPtr id_getVisibility;
        IntPtr id_setVisibility_I;
        public unsafe global::Android.Views.ViewStates Visibility {
            get {
                if (id_getVisibility == IntPtr.Zero)
                    id_getVisibility = JNIEnv.GetMethodID (class_ref, "getVisibility", "()I");
                return JNIEnv.CallIntMethod (((global::Java.Lang.Object) this).Handle, id_getVisibility);
            }
            set {
                if (id_setVisibility_I == IntPtr.Zero)
                    id_setVisibility_I = JNIEnv.GetMethodID (class_ref, "setVisibility", "(I)V");
                JValue* __args = stackalloc JValue [1];
                __args [0] = new JValue ((int) value);
                JNIEnv.CallVoidMethod (((global::Java.Lang.Object) this).Handle, id_setVisibility_I, __args);
            }
        }

特别是在
n\u SetVisibility\u I
n\u GetVisibility
方法中。请尝试为另一个映射指定
jni接口,而不是
jni类
。它们都使用jni接口。刚刚更新了问题您是否为相关接口添加了一个额外的问题?是的,我为两个接口都添加了。我唯一没有提到的是,这些接口在不同的项目/libs中。如果您有绑定项目的副本,可以上传并附加到您的问题,我可以看一看。哦,我看到了那个参数,谢谢。但是现在出现了另一个警告:“[Method]void setVisibility(int p0)中的[Interface]dom.core.IView有‘unnamed’参数”这是因为p0吗?关于演员的,有没有办法忽略这个?我的意思是,在生成代码后手动进行强制转换就是pita。有没有办法解决这些强制转换问题?
static Delegate cb_getVisibility;
#pragma warning disable 0169
        static Delegate GetGetVisibilityHandler ()
        {
            if (cb_getVisibility == null)
                cb_getVisibility = JNINativeWrapper.CreateDelegate ((Func<IntPtr, IntPtr, int>) n_GetVisibility);
            return cb_getVisibility;
        }

        static int n_GetVisibility (IntPtr jnienv, IntPtr native__this)
        {
            global::Dom.Common.ICustomView __this = global::Java.Lang.Object.GetObject<global::Dom.Common.ICustomView> (jnienv, native__this, JniHandleOwnership.DoNotTransfer);
            return __this.Visibility;
        }
#pragma warning restore 0169

        static Delegate cb_setVisibility_I;
#pragma warning disable 0169
        static Delegate GetSetVisibility_IHandler ()
        {
            if (cb_setVisibility_I == null)
                cb_setVisibility_I = JNINativeWrapper.CreateDelegate ((Action<IntPtr, IntPtr, int>) n_SetVisibility_I);
            return cb_setVisibility_I;
        }

        static void n_SetVisibility_I (IntPtr jnienv, IntPtr native__this, int native_value)
        {
            global::Dom.Common.ICustomView __this = global::Java.Lang.Object.GetObject<global::Dom.Common.ICustomView> (jnienv, native__this, JniHandleOwnership.DoNotTransfer);
            global::Android.Views.ViewStates value = (global::Android.Views.ViewStates) native_value;
            __this.Visibility = value;
        }
#pragma warning restore 0169

        IntPtr id_getVisibility;
        IntPtr id_setVisibility_I;
        public unsafe global::Android.Views.ViewStates Visibility {
            get {
                if (id_getVisibility == IntPtr.Zero)
                    id_getVisibility = JNIEnv.GetMethodID (class_ref, "getVisibility", "()I");
                return JNIEnv.CallIntMethod (((global::Java.Lang.Object) this).Handle, id_getVisibility);
            }
            set {
                if (id_setVisibility_I == IntPtr.Zero)
                    id_setVisibility_I = JNIEnv.GetMethodID (class_ref, "setVisibility", "(I)V");
                JValue* __args = stackalloc JValue [1];
                __args [0] = new JValue ((int) value);
                JNIEnv.CallVoidMethod (((global::Java.Lang.Object) this).Handle, id_setVisibility_I, __args);
            }
        }
(global::Android.Views.ViewStates) and (int)