【问题标题】:xamarin binding jar type errorxamarin 绑定 jar 类型错误
【发布时间】:2016-12-02 14:22:57
【问题描述】:

我有一个具有以下功能的库 .jar:

public void doAction(ArrayList<String[][]> list, int[] time) { }

我已经创建了一个绑定项目,并且 api.xml 有这个代码:

<method abstract="false" deprecated="not deprecated" final="false" name="doAction" native="false" return="void" static="false" synchronized="false" visibility="public">
<parameter name="p0" type="java.util.ArrayList<java.lang.String[][]>">
</parameter>
<parameter name="p1" type="int[]">
</parameter>
</method>

我在我的 android 项目中添加了绑定 dll 的引用并探索了我看到的 dll:

using Android.Runtime;
using System;
using System.Collections.Generic;

[Register ("doAction", "(Ljava/util/ArrayList;[I)V", "GetDoAction_Ljava_util_ArrayList_arrayIHandler")]
public virtual void DoAction (IList<string[][]> p0, int[] p1);

用法:

var myList = new List<string [] []> ();
var myCmd = new string [5] [];
int [] exeTime = new int [100];

myCmd = new string [5] [];
myCmd [0] = new string [] { "F", "2" };
myCmd [1] = new string [] { "A", "2" };
myCmd [2] = new string [] { "P", "0" };
myCmd [3] = new string [] { "V", "5" };
myCmd [4] = new string [] { "E", "1" };

myList.Add (myCmd);
exeTime [0] = 10;

mLib.DoAction (myList, exeTime);

所以出现以下错误: mono.android.runtime.JavaObject 无法转换为 java.lang.String[][]

怎么了?

谢谢

【问题讨论】:

    标签: android xamarin binding


    【解决方案1】:

    我有同样的问题。就我而言,我有下一个 java 方法:

    public int addNotes(long modelId, long deckId, List<String[]> fieldsList, List<Set<String>> tagsList)
    

    在我的绑定库中它变成了:

    public int AddNotes(long p0, long p1, IList<string[]> p2, IList<ICollection<string>> p3);
    

    我通过在 Metadata.xml 中添加 attr 规则将绑定库中的参数类型从 string[] 更改为 Java.Lang.Object 来解决。在我的情况下,规则是(在路径属性中,您需要 XPath 到 api.xml 中的参数):

    &lt;attr path="/api/package[2]/class[1]/method[6]//parameter[3]" name="type"&gt;java.util.List&amp;lt;java.lang.Object&amp;gt;&lt;/attr&gt;

    【讨论】: