xamarin绑定jar类型错误

时间:2016-07-28 09:23:13

标签: android xamarin binding

我有一个带有以下功能的库.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 [] []

有什么问题?

由于

1 个答案:

答案 0 :(得分:0)

我有同样的问题。在我的情况下,我有下一个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中的参数):

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