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));
What you need to do is cast the string array to an object, like the following code;
string[] strings = new string[] { "string1", "string2", ...};
myAndroidJavaObject.Call("myMethod", **(object)** strings);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With