3

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?

2 Answers 2

8

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));
Sign up to request clarification or add additional context in comments.

Comments

2

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.