Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.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
调用数组传递错误(Unity for Android)_Android_Unity3d - Fatal编程技术网

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

调用数组传递错误(Unity for Android),android,unity3d,Android,Unity3d,我正在开发UnityforAndroid应用程序,它使用原生Android插件。在它里面,我使用了AndroidJavaObject的调用方法 如中所述,方法的签名为: 公共void调用(string methodName,params object[]args) 我想将字符串数组发送到我的项目中: string[] strings = new string[] { "string1", "string2", ...}; myAndroidJavaObject.Call("myMethod",

我正在开发UnityforAndroid应用程序,它使用原生Android插件。在它里面,我使用了
AndroidJavaObject
调用
方法

如中所述,方法的签名为:

公共void调用(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:Ljava.lang.Object类中没有名为='myMethod'签名='(Ljava/lang/String;Ljava/lang/String;)V'的非静态方法


有人能描述程序在这种情况下的行为吗?

当数组被发送到
AndroidJavaObject
时,需要进行特殊处理。从中,您可以实现一个函数来处理它,如下所示:

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;
}

您只需将字符串数组强制转换为一个对象,如下代码所示

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

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

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