Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.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绑定的Mono-锯齿阵列_Android_.net_Xamarin.android_Xamarin_Java Binding - Fatal编程技术网

Android绑定的Mono-锯齿阵列

Android绑定的Mono-锯齿阵列,android,.net,xamarin.android,xamarin,java-binding,Android,.net,Xamarin.android,Xamarin,Java Binding,我们正在绑定一个Java库,其方法如下: void onDataReceived(java.lang.String fromNode, java.lang.String fromChannel, java.lang.String payloadType, byte[][] payload) 请注意byte[]payload参数 一切都可以正常编译,除了在运行时从Java启动侦听器时,我们会得到以下错误: System.NotSupportedException: Rectangular arr

我们正在绑定一个Java库,其方法如下:

void onDataReceived(java.lang.String fromNode, java.lang.String fromChannel, java.lang.String payloadType, byte[][] payload)
请注意
byte[]payload
参数

一切都可以正常编译,除了在运行时从Java启动侦听器时,我们会得到以下错误:

System.NotSupportedException: Rectangular arrays are not currently supported.
目前Mono支持Android绑定项目吗

我们是否可以使用另一种类型来代替
byte[][]
来完成工作

目前Mono支持Android绑定项目吗

不,我想我应该把它修好

是否需要
有效负载
参数?如果没有,您可以编辑生成的代码[^1]以删除
有效负载的封送处理

如果确实需要
payload
参数,可以编辑生成的代码并替换此代码:

byte[][] payload = (byte[][]) JNIEnv.GetArray (native_payload, JniHandleOwnership.DoNotTransfer, typeof (byte[]));
为此:

byte[][] payload = JNIEnv.GetArray<byte[]> (native_payload);
byte[][]有效载荷=JNIEnv.GetArray(本机_有效载荷);
(至少,该更改适用于我的琐碎测试[^2]。)

[^1]:Ew,编辑生成的代码

[^2]:普通测试:

Action<byte[][], byte[][]> equal = (a, b) => {
        if (!a.SelectMany (_ => _).SequenceEqual (b.SelectMany (_ => _)))
            throw new InvalidOperationException ("Sequences don't match!\n" +
                    "Expected: " + string.Join (" ", a.SelectMany (_ => _).Select (_ => _.ToString ("x2"))) +
                    "  Actual: " + string.Join (" ", b.SelectMany (_ => _).Select (_ => _.ToString ("x2"))));
};
byte[][] data = new byte[][]{
    new byte[]{11, 12, 13},
    new byte[]{21, 22, 23},
    new byte[]{31, 32, 33},
};
using (var byteArrayArray = new Java.Lang.Object (JNIEnv.NewArray (data), JniHandleOwnership.TransferLocalRef)) {
    Console.WriteLine ("# jonp [[b: {0}", JNIEnv.GetClassNameFromInstance (byteArrayArray.Handle));
    byte[][] data2 = JNIEnv.GetArray<byte[]> (byteArrayArray.Handle);
    equal (data, data2);
}
Action equal=(a,b)=>{
如果(!a.SelectMany(=>.SequenceEqual)(b.SelectMany(=>.SequenceEqual)))
抛出新的InvalidOperationException(“序列不匹配!\n”+
应为:“+string.Join(”,a.SelectMany(\u=>).Select(\u=>\ ux0.ToString(“x2”))+
实际值:“+string.Join(”,b.SelectMany(=>).Select(=>。.ToString(“x2”)));
};
字节[][]数据=新字节[][]{
新字节[]{11,12,13},
新字节[]{21,22,23},
新字节[]{31,32,33},
};
使用(var byteArrayArray=newjava.Lang.Object(JNIEnv.NewArray(数据),JniHandleOwnership.TransferLocalRef)){
Console.WriteLine(#jonp[[b:{0}],JNIEnv.GetClassNameFromInstance(byteArrayArray.Handle));
字节[][]数据2=JNIEnv.GetArray(byteArrayArray.Handle);
相等(数据,数据2);
}

我们实际上需要
有效载荷
,这是我们感兴趣的数据。我可以做一些不好的事情,只需要访问
字节[]【】
。我可以通过电子邮件或其他方式向您发送绑定项目。向您发送该项目的最佳方式是什么?(我也输入了Xamarin支持请求)仅供参考,在我们将
字节[][]
传递给Java的情况下,它似乎可以正常工作,但当它是侦听器并且Java正在传递
字节[][]时就不行了
to C#。简要调查表明我需要进行运行时修复。我会尽快完成4.7.11 alpha版本和未来4.6.10稳定版本的修复。没有实际测试的简要调查毫无价值。我认为我有一个解决办法;答案更新。我仍在进行实际修复。对于遇到此问题的其他人,@jonp没有他的问题在4.7.12中得到了解决。将来应该不会有问题。