AndroidJavaObject.Call array passing error (Unity for Android)

匿名 (未验证) 提交于 2019-12-03 02:33:02

问题:

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?

回答1:

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


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!