public static ArrayType ConvertFromJNIArray <ArrayType>(IntPtr array) { System.Type elementType = typeof(ArrayType).GetElementType(); if (elementType.IsPrimitive) { if (elementType == typeof(int)) { return((ArrayType)AndroidJNISafe.FromIntArray(array)); } if (elementType == typeof(bool)) { return((ArrayType)AndroidJNISafe.FromBooleanArray(array)); } if (elementType == typeof(byte)) { return((ArrayType)AndroidJNISafe.FromByteArray(array)); } if (elementType == typeof(short)) { return((ArrayType)AndroidJNISafe.FromShortArray(array)); } if (elementType == typeof(long)) { return((ArrayType)AndroidJNISafe.FromLongArray(array)); } if (elementType == typeof(float)) { return((ArrayType)AndroidJNISafe.FromFloatArray(array)); } if (elementType == typeof(double)) { return((ArrayType)AndroidJNISafe.FromDoubleArray(array)); } if (elementType != typeof(char)) { return(default(ArrayType)); } return((ArrayType)AndroidJNISafe.FromCharArray(array)); } if (elementType == typeof(string)) { IntPtr[] ptrArray = AndroidJNISafe.FromObjectArray(array); int num = ptrArray.GetLength(0); string[] strArray = new string[num]; for (int j = 0; j < num; j++) { strArray[j] = AndroidJNISafe.GetStringUTFChars(ptrArray[j]); } return((ArrayType)strArray); } if (elementType != typeof(AndroidJavaObject)) { throw new Exception("JNI: Unknown generic array type '" + elementType + "'"); } IntPtr[] ptrArray2 = AndroidJNISafe.FromObjectArray(array); int length = ptrArray2.GetLength(0); AndroidJavaObject[] objArray = new AndroidJavaObject[length]; for (int i = 0; i < length; i++) { objArray[i] = new AndroidJavaObject(ptrArray2[i]); } return((ArrayType)objArray); }
public static ArrayType ConvertFromJNIArray <ArrayType>(IntPtr array) { Type elementType = typeof(ArrayType).GetElementType(); if (elementType.IsPrimitive) { if (elementType == typeof(int)) { return((ArrayType)((object)AndroidJNISafe.FromIntArray(array))); } if (elementType == typeof(bool)) { return((ArrayType)((object)AndroidJNISafe.FromBooleanArray(array))); } if (elementType == typeof(byte)) { return((ArrayType)((object)AndroidJNISafe.FromByteArray(array))); } if (elementType == typeof(short)) { return((ArrayType)((object)AndroidJNISafe.FromShortArray(array))); } if (elementType == typeof(long)) { return((ArrayType)((object)AndroidJNISafe.FromLongArray(array))); } if (elementType == typeof(float)) { return((ArrayType)((object)AndroidJNISafe.FromFloatArray(array))); } if (elementType == typeof(double)) { return((ArrayType)((object)AndroidJNISafe.FromDoubleArray(array))); } if (elementType == typeof(char)) { return((ArrayType)((object)AndroidJNISafe.FromCharArray(array))); } return(default(ArrayType)); } else { if (elementType == typeof(string)) { IntPtr[] array2 = AndroidJNISafe.FromObjectArray(array); int length = array2.GetLength(0); string[] array3 = new string[length]; for (int i = 0; i < length; i++) { array3[i] = AndroidJNISafe.GetStringUTFChars(array2[i]); } return((ArrayType)((object)array3)); } if (elementType == typeof(AndroidJavaObject)) { IntPtr[] array4 = AndroidJNISafe.FromObjectArray(array); int length2 = array4.GetLength(0); AndroidJavaObject[] array5 = new AndroidJavaObject[length2]; for (int j = 0; j < length2; j++) { array5[j] = new AndroidJavaObject(array4[j]); } return((ArrayType)((object)array5)); } throw new Exception("JNI: Unknown generic array type '" + elementType + "'"); } }