protected ReturnType _Call <ReturnType>(string methodName, params object[] args)
{
ReturnType local;
if (args == null)
{
args = new object[1];
}
IntPtr methodID = AndroidJNIHelper.GetMethodID <ReturnType>(this.m_jclass, methodName, args, false);
jvalue[] jvalueArray = AndroidJNIHelper.CreateJNIArgArray(args);
try
{
if (AndroidReflection.IsPrimitive(typeof(ReturnType)))
{
if (typeof(ReturnType) == typeof(int))
{
return((ReturnType)AndroidJNISafe.CallIntMethod(this.m_jobject, methodID, jvalueArray));
}
if (typeof(ReturnType) == typeof(bool))
{
return((ReturnType)AndroidJNISafe.CallBooleanMethod(this.m_jobject, methodID, jvalueArray));
}
if (typeof(ReturnType) == typeof(byte))
{
return((ReturnType)AndroidJNISafe.CallByteMethod(this.m_jobject, methodID, jvalueArray));
}
if (typeof(ReturnType) == typeof(short))
{
return((ReturnType)AndroidJNISafe.CallShortMethod(this.m_jobject, methodID, jvalueArray));
}
if (typeof(ReturnType) == typeof(long))
{
return((ReturnType)AndroidJNISafe.CallLongMethod(this.m_jobject, methodID, jvalueArray));
}
if (typeof(ReturnType) == typeof(float))
{
return((ReturnType)AndroidJNISafe.CallFloatMethod(this.m_jobject, methodID, jvalueArray));
}
if (typeof(ReturnType) == typeof(double))
{
return((ReturnType)AndroidJNISafe.CallDoubleMethod(this.m_jobject, methodID, jvalueArray));
}
if (typeof(ReturnType) == typeof(char))
{
return((ReturnType)AndroidJNISafe.CallCharMethod(this.m_jobject, methodID, jvalueArray));
}
}
else
{
if (typeof(ReturnType) == typeof(string))
{
return((ReturnType)AndroidJNISafe.CallStringMethod(this.m_jobject, methodID, jvalueArray));
}
if (typeof(ReturnType) == typeof(AndroidJavaClass))
{
return((ReturnType)AndroidJavaClassDeleteLocalRef(AndroidJNISafe.CallObjectMethod(this.m_jobject, methodID, jvalueArray)));
}
if (typeof(ReturnType) == typeof(AndroidJavaObject))
{
return((ReturnType)AndroidJavaObjectDeleteLocalRef(AndroidJNISafe.CallObjectMethod(this.m_jobject, methodID, jvalueArray)));
}
if (!AndroidReflection.IsAssignableFrom(typeof(Array), typeof(ReturnType)))
{
throw new Exception("JNI: Unknown return type '" + typeof(ReturnType) + "'");
}
return(AndroidJNIHelper.ConvertFromJNIArray <ReturnType>(AndroidJNISafe.CallObjectMethod(this.m_jobject, methodID, jvalueArray)));
}
local = default(ReturnType);
}
finally
{
AndroidJNIHelper.DeleteJNIArgArray(args, jvalueArray);
}
return(local);
}