Я сделал привязку JNI в Xamarin для проекта Android, над которым я работаю. Исходная Java-функция, представляющая интерес, приняла пустой ArrayList<String>
как один из входных параметров и добавила содержимое в список как часть функции (изменение самого объекта).как передать список привязке в xamarin
При преобразовании в C# код, тип входного списка был изменен на:
global::System.Collections.Generic.IList<string>.
Возвращаемое значение функции остается неизменным, но список входных больше не модифицируется. Я думаю, что это имеет какое-то отношение к тому, как привязка обрабатывает сортировку параметров функции.
Есть ли что-то, что я должен сделать, чтобы изменить привязку, чтобы изменить входной параметр (p2 в сгенерированном коде C#, показанном ниже)?
public static unsafe int ProcessAudioBuffer (short[] p0, int p1, global::System.Collections.Generic.IList<string> p2)
{
if (id_processAudioBuffer_arraySILjava_util_List_ == IntPtr.Zero)
id_processAudioBuffer_arraySILjava_util_List_ = JNIEnv.GetStaticMethodID (class_ref, "processAudioBuffer", "([SILjava/util/List;)I");
IntPtr native_p0 = JNIEnv.NewArray (p0);
IntPtr native_p2 = global::Android.Runtime.JavaList<string>.ToLocalJniHandle (p2);
try {
JValue* __args = stackalloc JValue [3];
__args [0] = new JValue (native_p0);
__args [1] = new JValue (p1);
__args [2] = new JValue (native_p2);
int __ret = JNIEnv.CallStaticIntMethod (class_ref, id_processAudioBuffer_arraySILjava_util_List_, __args);
return __ret;
} finally {
if (p0 != null) {
JNIEnv.CopyArray (native_p0, p0);
JNIEnv.DeleteLocalRef (native_p0);
}
JNIEnv.DeleteLocalRef (native_p2);
}
}