AndroidJavaObject.Call数组传递错误(适用于Android的Unity) [英] AndroidJavaObject.Call array passing error (Unity for Android)
问题描述
我正在开发使用Android本机插件的Unity for Android应用程序.在其中,我使用AndroidJavaObject
的Call
方法.
文档中所述,方法的签名为:>
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;
在这种情况下,谁能描述程序的行为?
将数组发送到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;
}
然后您可以像这样调用函数:
myAndroidJavaObject.Call("myMethod", javaArrayFromCS(strings));
I'm working on Unity for Android application, which uses native Android plugin. Inside of it I use AndroidJavaObject
's Call
method.
As it says in documentation, signature of method is:
public void Call(string methodName, params object[] args);
I want to send array of strings into my project:
string[] strings = new string[] { "string1", "string2", ...};
myAndroidJavaObject.Call("myMethod", strings);
And receive it into Java code:
public void myMethod(String[] strings){
// some code where I use strings
}
But I receive error:
AndroidJavaException: java.lang.NoSuchMethodError: no non-static method with name='myMethod' signature='(Ljava/lang/String;Ljava/lang/String;)V' in class Ljava.lang.Object;
Can anyone describe program's behavior in this situation?
Arrays require special treatment when being sent to an AndroidJavaObject
. Taken from this article, you can implement a function that will handle it like so:
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;
}
You can then call into your function like this:
myAndroidJavaObject.Call("myMethod", javaArrayFromCS(strings));
这篇关于AndroidJavaObject.Call数组传递错误(适用于Android的Unity)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!