Lets say we want to set fields of a Java object in Unity with different types, including array.
Let the class in java be,
package com.example;
public class Address {
int mHouseNumber;
String mStreet;
String mCity;
String mCountry;
String [] mPhoneNumders;
}
Now lets create Address object from c# and populate its fields.
First of all lets create an Address object
AndroidJavaObject addressObj = new AndroidJavaObject ("com.example.Address");
Now populate all the fields except the mPhoneNumders.
addressObj.Set<int> ("mHouseNumber", 10);
addressObj.Set<string> ("mStreet", "abc");
addressObj.Set<string> ("mCity", "def");
addressObj.Set<string> ("mCountry", "ghi");
Now lets create a java object from the c# array so that we can set the field mPhoneNumders. Lets create a small method for it.
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])));
}
}
Now as the last step lets set the field mPhoneNumders
string [] phoneNumbers = {"12345678", "87654321"};
addressObj.Set<AndroidJavaObject> ("mPhoneNumders", javaArrayFromCS(phoneNumbers));