unity3d 调用数组传递错误(Unity for Android)

kuarbcqp  于 2022-11-16  发布在  Android
关注(0)|答案(2)|浏览(190)

我正在为Android应用开发Unity,它使用原生Android插件。在它里面我使用AndroidJavaObjectCall方法。
documentation中所述,方法的签名为:
public void Call(string methodName, params object[] args);
我想将字符串数组发送到我的项目中:

string[] strings = new string[] { "string1", "string2", ...};
myAndroidJavaObject.Call("myMethod", strings);

并将其接收成Java代码:

public void myMethod(String[] strings){
    // some code where I use strings
}

但我收到错误:
AndroidJavaException: java.lang.NoSuchMethodError: no non-static method with name='myMethod' signature='(Ljava/lang/String;Ljava/lang/String;)V' in class Ljava.lang.Object;
有人能描述一下程序在这种情况下的行为吗?

4ioopgfo

4ioopgfo1#

数组在发送到AndroidJavaObject时需要特殊处理。从this article中获取数组,您可以实现一个函数来处理它,如下所示:

private AndroidJavaObject javaArrayFromCS(string [] values) {
    AndroidJavaClass arrayClass  = new AndroidJavaClass("java.lang.reflect.Array");
    AndroidJavaObject arrayObject = arrayClass.CallStatic<AndroidJavaObject>("newInstance", new AndroidJavaClass("java.lang.String"), values.Count());
    for (int i=0; i<values.Count(); ++i) {
        arrayClass.CallStatic("set", arrayObject, i, new AndroidJavaObject("java.lang.String", values[i])));
    }

    return arrayObject;
}

然后,您可以像这样呼叫函式:

myAndroidJavaObject.Call("myMethod", javaArrayFromCS(strings));
jchrr9hc

jchrr9hc2#

您需要做的是将字符串数组转换为对象,如以下代码所示;

string[] strings = new string[] { "string1", "string2", ...};

myAndroidJavaObject.Call("myMethod", **(object)** strings);

相关问题