我有一个带有以下功能的库.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 [] []
有什么问题?
由于
答案 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中的参数):
<attr path="/api/package[2]/class[1]/method[6]//parameter[3]" name="type">java.util.List<java.lang.Object></attr>
&#13;