DeleteLocalRef() public static method

public static DeleteLocalRef ( IntPtr localref ) : void
localref System.IntPtr
return void
コード例 #1
0
        public static IntPtr GetConstructorID(IntPtr jclass, string signature)
        {
            IntPtr intPtr = IntPtr.Zero;
            IntPtr result;

            try
            {
                intPtr = AndroidReflection.GetConstructorMember(jclass, signature);
                result = AndroidJNISafe.FromReflectedMethod(intPtr);
            }
            catch (Exception ex)
            {
                IntPtr methodID = AndroidJNISafe.GetMethodID(jclass, "<init>", signature);
                if (!(methodID != IntPtr.Zero))
                {
                    throw ex;
                }
                result = methodID;
            }
            finally
            {
                AndroidJNISafe.DeleteLocalRef(intPtr);
            }
            return(result);
        }
コード例 #2
0
        public static void CheckException()
        {
            IntPtr jthrowable = AndroidJNI.ExceptionOccurred();

            if (jthrowable != IntPtr.Zero)
            {
                AndroidJNI.ExceptionClear();
                IntPtr jthrowableClass     = AndroidJNI.FindClass("java/lang/Throwable");
                IntPtr androidUtilLogClass = AndroidJNI.FindClass("android/util/Log");
                try
                {
                    IntPtr toStringMethodId            = AndroidJNI.GetMethodID(jthrowableClass, "toString", "()Ljava/lang/String;");
                    IntPtr getStackTraceStringMethodId = AndroidJNI.GetStaticMethodID(androidUtilLogClass, "getStackTraceString", "(Ljava/lang/Throwable;)Ljava/lang/String;");
                    string exceptionMessage            = AndroidJNI.CallStringMethod(jthrowable, toStringMethodId, new jvalue[] {});
                    // Pass jthrowable as a param to getStackTraceString()
                    jvalue[] jniArgs = new jvalue[1];
                    jniArgs[0].l = jthrowable;
                    string exceptionCallStack = AndroidJNI.CallStaticStringMethod(androidUtilLogClass, getStackTraceStringMethodId, jniArgs);
                    throw new AndroidJavaException(exceptionMessage, exceptionCallStack);
                }
                finally
                {
                    AndroidJNISafe.DeleteLocalRef(jthrowable);
                    AndroidJNISafe.DeleteLocalRef(jthrowableClass);
                    AndroidJNISafe.DeleteLocalRef(androidUtilLogClass);
                }
            }
        }
コード例 #3
0
        public static IntPtr GetFieldID(IntPtr jclass, string fieldName, string signature, bool isStatic)
        {
            IntPtr intPtr = IntPtr.Zero;
            IntPtr result;

            try
            {
                intPtr = AndroidReflection.GetFieldMember(jclass, fieldName, signature, isStatic);
                result = AndroidJNISafe.FromReflectedField(intPtr);
            }
            catch (Exception ex)
            {
                IntPtr intPtr2 = (!isStatic) ? AndroidJNISafe.GetFieldID(jclass, fieldName, signature) : AndroidJNISafe.GetStaticFieldID(jclass, fieldName, signature);
                if (!(intPtr2 != IntPtr.Zero))
                {
                    throw ex;
                }
                result = intPtr2;
            }
            finally
            {
                AndroidJNISafe.DeleteLocalRef(intPtr);
            }
            return(result);
        }
コード例 #4
0
        public static IntPtr GetMethodID(IntPtr jclass, string methodName, string signature, bool isStatic)
        {
            IntPtr intPtr = IntPtr.Zero;
            IntPtr result;

            try
            {
                intPtr = AndroidReflection.GetMethodMember(jclass, methodName, signature, isStatic);
                result = AndroidJNISafe.FromReflectedMethod(intPtr);
            }
            catch (Exception ex)
            {
                IntPtr methodIDFallback = _AndroidJNIHelper.GetMethodIDFallback(jclass, methodName, signature, isStatic);
                if (!(methodIDFallback != IntPtr.Zero))
                {
                    throw ex;
                }
                result = methodIDFallback;
            }
            finally
            {
                AndroidJNISafe.DeleteLocalRef(intPtr);
            }
            return(result);
        }
コード例 #5
0
        public static void CheckException()
        {
            IntPtr intPtr = AndroidJNI.ExceptionOccurred();
            bool   flag   = intPtr != IntPtr.Zero;

            if (flag)
            {
                AndroidJNI.ExceptionClear();
                IntPtr intPtr2 = AndroidJNI.FindClass("java/lang/Throwable");
                IntPtr intPtr3 = AndroidJNI.FindClass("android/util/Log");
                try
                {
                    IntPtr   methodID       = AndroidJNI.GetMethodID(intPtr2, "toString", "()Ljava/lang/String;");
                    IntPtr   staticMethodID = AndroidJNI.GetStaticMethodID(intPtr3, "getStackTraceString", "(Ljava/lang/Throwable;)Ljava/lang/String;");
                    string   message        = AndroidJNI.CallStringMethod(intPtr, methodID, new jvalue[0]);
                    jvalue[] array          = new jvalue[1];
                    array[0].l = intPtr;
                    string javaStackTrace = AndroidJNI.CallStaticStringMethod(intPtr3, staticMethodID, array);
                    throw new AndroidJavaException(message, javaStackTrace);
                }
                finally
                {
                    AndroidJNISafe.DeleteLocalRef(intPtr);
                    AndroidJNISafe.DeleteLocalRef(intPtr2);
                    AndroidJNISafe.DeleteLocalRef(intPtr3);
                }
            }
        }
コード例 #6
0
        public static IntPtr GetConstructorID(IntPtr jclass, string signature)
        {
            IntPtr ptr3;
            IntPtr zero = IntPtr.Zero;

            try
            {
                zero = AndroidReflection.GetConstructorMember(jclass, signature);
                ptr3 = AndroidJNISafe.FromReflectedMethod(zero);
            }
            catch (Exception exception)
            {
                IntPtr ptr2 = AndroidJNISafe.GetMethodID(jclass, "<init>", signature);
                if (ptr2 == IntPtr.Zero)
                {
                    throw exception;
                }
                return(ptr2);
            }
            finally
            {
                AndroidJNISafe.DeleteLocalRef(zero);
            }
            return(ptr3);
        }
コード例 #7
0
        public static IntPtr GetMethodID(IntPtr jclass, string methodName, string signature, bool isStatic)
        {
            IntPtr ptr3;
            IntPtr zero = IntPtr.Zero;

            try
            {
                zero = AndroidReflection.GetMethodMember(jclass, methodName, signature, isStatic);
                ptr3 = AndroidJNISafe.FromReflectedMethod(zero);
            }
            catch (Exception exception)
            {
                IntPtr ptr2 = !isStatic?AndroidJNISafe.GetMethodID(jclass, methodName, signature) : AndroidJNISafe.GetStaticMethodID(jclass, methodName, signature);

                if (ptr2 == IntPtr.Zero)
                {
                    throw exception;
                }
                return(ptr2);
            }
            finally
            {
                AndroidJNISafe.DeleteLocalRef(zero);
            }
            return(ptr3);
        }
コード例 #8
0
        public static void CheckException()
        {
            IntPtr localref = AndroidJNI.ExceptionOccurred();

            if (!(localref != IntPtr.Zero))
            {
                return;
            }
            AndroidJNI.ExceptionClear();
            IntPtr num1 = AndroidJNI.FindClass("java/lang/Throwable");
            IntPtr num2 = AndroidJNI.FindClass("android/util/Log");

            try
            {
                IntPtr   methodId       = AndroidJNI.GetMethodID(num1, "toString", "()Ljava/lang/String;");
                IntPtr   staticMethodId = AndroidJNI.GetStaticMethodID(num2, "getStackTraceString", "(Ljava/lang/Throwable;)Ljava/lang/String;");
                string   message        = AndroidJNI.CallStringMethod(localref, methodId, new jvalue[0]);
                jvalue[] args           = new jvalue[1];
                args[0].l = localref;
                string javaStackTrace = AndroidJNI.CallStaticStringMethod(num2, staticMethodId, args);
                throw new AndroidJavaException(message, javaStackTrace);
            }
            finally
            {
                AndroidJNISafe.DeleteLocalRef(localref);
                AndroidJNISafe.DeleteLocalRef(num1);
                AndroidJNISafe.DeleteLocalRef(num2);
            }
        }
コード例 #9
0
        private void _AndroidJavaObject(string className, params object[] args)
        {
            this.DebugPrint("Creating AndroidJavaObject from " + className);
            bool flag = args == null;

            if (flag)
            {
                args = new object[1];
            }
            IntPtr jobject = AndroidJNISafe.FindClass(className.Replace('.', '/'));

            this.m_jclass = new GlobalJavaObjectRef(jobject);
            jvalue[] array = AndroidJNIHelper.CreateJNIArgArray(args);
            try
            {
                IntPtr constructorID = AndroidJNIHelper.GetConstructorID(this.m_jclass, args);
                IntPtr intPtr        = AndroidJNISafe.NewObject(this.m_jclass, constructorID, array);
                this.m_jobject = new GlobalJavaObjectRef(intPtr);
                AndroidJNISafe.DeleteLocalRef(intPtr);
            }
            finally
            {
                AndroidJNIHelper.DeleteJNIArgArray(args, array);
            }
        }
コード例 #10
0
 internal static AndroidJavaClass AndroidJavaClassDeleteLocalRef(IntPtr jclass)
 {
     try
     {
         return(new AndroidJavaClass(jclass));
     }
     finally
     {
         AndroidJNISafe.DeleteLocalRef(jclass);
     }
 }
コード例 #11
0
 internal static AndroidJavaObject AndroidJavaObjectDeleteLocalRef(IntPtr jobject)
 {
     try
     {
         return(new AndroidJavaObject(jobject));
     }
     finally
     {
         AndroidJNISafe.DeleteLocalRef(jobject);
     }
 }
コード例 #12
0
        internal AndroidJavaObject(IntPtr jobject) : this()
        {
            if (jobject == IntPtr.Zero)
            {
                throw new Exception("JNI: Init'd AndroidJavaObject with null ptr!");
            }
            IntPtr objectClass = AndroidJNISafe.GetObjectClass(jobject);

            this.m_jobject = AndroidJNI.NewGlobalRef(jobject);
            this.m_jclass  = AndroidJNI.NewGlobalRef(objectClass);
            AndroidJNISafe.DeleteLocalRef(objectClass);
        }
コード例 #13
0
        public static void DeleteJNIArgArray(object[] args, jvalue[] jniArgs)
        {
            int num = 0;

            foreach (object obj in args)
            {
                if (obj is string || obj is AndroidJavaRunnable || obj is AndroidJavaProxy || obj is Array)
                {
                    AndroidJNISafe.DeleteLocalRef(jniArgs[num].l);
                }
                num++;
            }
        }
コード例 #14
0
        private static IntPtr GetStaticMethodID(string clazz, string methodName, string signature)
        {
            IntPtr num = AndroidJNISafe.FindClass(clazz);

            try
            {
                return(AndroidJNISafe.GetStaticMethodID(num, methodName, signature));
            }
            finally
            {
                AndroidJNISafe.DeleteLocalRef(num);
            }
        }
コード例 #15
0
        public static void DeleteJNIArgArray(object[] args, jvalue[] jniArgs)
        {
            int index = 0;

            foreach (object obj2 in args)
            {
                if (((obj2 is string) || (obj2 is AndroidJavaRunnable)) || ((obj2 is AndroidJavaProxy) || (obj2 is Array)))
                {
                    AndroidJNISafe.DeleteLocalRef(jniArgs[index].l);
                }
                index++;
            }
        }
コード例 #16
0
        internal static AndroidJavaClass AndroidJavaClassDeleteLocalRef(IntPtr jclass)
        {
            AndroidJavaClass result;

            try
            {
                result = new AndroidJavaClass(jclass);
            }
            finally
            {
                AndroidJNISafe.DeleteLocalRef(jclass);
            }
            return(result);
        }
コード例 #17
0
 public static IntPtr GetConstructorMember(IntPtr jclass, string signature)
 {
     jvalue[] args = new jvalue[2];
     try
     {
         args[0].l = jclass;
         args[1].l = AndroidJNISafe.NewStringUTF(signature);
         return(AndroidJNISafe.CallStaticObjectMethod(AndroidReflection.s_ReflectionHelperClass, AndroidReflection.s_ReflectionHelperGetConstructorID, args));
     }
     finally
     {
         AndroidJNISafe.DeleteLocalRef(args[1].l);
     }
 }
コード例 #18
0
        public static void DeleteJNIArgArray(object[] args, jvalue[] jniArgs)
        {
            int num = 0;

            for (int i = 0; i < args.Length; i++)
            {
                object obj = args[i];
                if (obj is string || obj is AndroidJavaRunnable || obj is AndroidJavaProxy || obj is Array)
                {
                    AndroidJNISafe.DeleteLocalRef(jniArgs[num].l);
                }
                num++;
            }
        }
コード例 #19
0
        internal static AndroidJavaClass AndroidJavaClassDeleteLocalRef(IntPtr jclass)
        {
            AndroidJavaClass class2;

            try
            {
                class2 = new AndroidJavaClass(jclass);
            }
            finally
            {
                AndroidJNISafe.DeleteLocalRef(jclass);
            }
            return(class2);
        }
コード例 #20
0
        internal static AndroidJavaObject AndroidJavaObjectDeleteLocalRef(IntPtr jobject)
        {
            AndroidJavaObject obj2;

            try
            {
                obj2 = new AndroidJavaObject(jobject);
            }
            finally
            {
                AndroidJNISafe.DeleteLocalRef(jobject);
            }
            return(obj2);
        }
コード例 #21
0
        internal static AndroidJavaObject AndroidJavaObjectDeleteLocalRef(IntPtr jobject)
        {
            AndroidJavaObject result;

            try
            {
                result = new AndroidJavaObject(jobject);
            }
            finally
            {
                AndroidJNISafe.DeleteLocalRef(jobject);
            }
            return(result);
        }
コード例 #22
0
        private static IntPtr GetStaticMethodID(string clazz, string methodName, string signature)
        {
            IntPtr intPtr = AndroidJNISafe.FindClass(clazz);
            IntPtr staticMethodID;

            try
            {
                staticMethodID = AndroidJNISafe.GetStaticMethodID(intPtr, methodName, signature);
            }
            finally
            {
                AndroidJNISafe.DeleteLocalRef(intPtr);
            }
            return(staticMethodID);
        }
コード例 #23
0
 public static IntPtr GetMethodMember(IntPtr jclass, string methodName, string signature, bool isStatic)
 {
     jvalue[] array = new jvalue[4];
     try
     {
         array[0].l = jclass;
         array[1].l = AndroidJNISafe.NewStringUTF(methodName);
         array[2].l = AndroidJNISafe.NewStringUTF(signature);
         array[3].z = isStatic;
         return(AndroidJNISafe.CallStaticObjectMethod(s_ReflectionHelperClass, s_ReflectionHelperGetMethodID, array));
     }
     finally
     {
         AndroidJNISafe.DeleteLocalRef(array[1].l);
         AndroidJNISafe.DeleteLocalRef(array[2].l);
     }
 }
コード例 #24
0
 public static IntPtr GetFieldMember(IntPtr jclass, string fieldName, string signature, bool isStatic)
 {
     jvalue[] args = new jvalue[4];
     try
     {
         args[0].l = jclass;
         args[1].l = AndroidJNISafe.NewStringUTF(fieldName);
         args[2].l = AndroidJNISafe.NewStringUTF(signature);
         args[3].z = isStatic;
         return(AndroidJNISafe.CallStaticObjectMethod(AndroidReflection.s_ReflectionHelperClass, AndroidReflection.s_ReflectionHelperGetFieldID, args));
     }
     finally
     {
         AndroidJNISafe.DeleteLocalRef(args[1].l);
         AndroidJNISafe.DeleteLocalRef(args[2].l);
     }
 }
コード例 #25
0
        public static void CheckException()
        {
            IntPtr intPtr = AndroidJNI.ExceptionOccurred();

            if (intPtr != IntPtr.Zero)
            {
                AndroidJNI.ExceptionClear();
                IntPtr intPtr2 = AndroidJNI.FindClass("java/lang/Throwable");
                try
                {
                    IntPtr methodID = AndroidJNI.GetMethodID(intPtr2, "toString", "()Ljava/lang/String;");
                    throw new AndroidJavaException(AndroidJNI.CallStringMethod(intPtr, methodID, new jvalue[0]));
                }
                finally
                {
                    AndroidJNISafe.DeleteLocalRef(intPtr);
                    AndroidJNISafe.DeleteLocalRef(intPtr2);
                }
            }
        }
コード例 #26
0
 private void _AndroidJavaObject(string className, params object[] args)
 {
     this.DebugPrint("Creating AndroidJavaObject from " + className);
     if (args == null)
     {
         args = new object[1];
     }
     using (AndroidJavaObject androidJavaObject = AndroidJavaObject.FindClass(className))
     {
         this.m_jclass = AndroidJNI.NewGlobalRef(androidJavaObject.GetRawObject());
         jvalue[] jniArgArray = AndroidJNIHelper.CreateJNIArgArray(args);
         try
         {
             IntPtr localref = AndroidJNISafe.NewObject(this.m_jclass, AndroidJNIHelper.GetConstructorID(this.m_jclass, args), jniArgArray);
             this.m_jobject = AndroidJNI.NewGlobalRef(localref);
             AndroidJNISafe.DeleteLocalRef(localref);
         }
         finally
         {
             AndroidJNIHelper.DeleteJNIArgArray(args, jniArgArray);
         }
     }
 }
コード例 #27
0
        public static IntPtr GetConstructorID(IntPtr jclass, string signature)
        {
            IntPtr num = IntPtr.Zero;

            try
            {
                num = AndroidReflection.GetConstructorMember(jclass, signature);
                return(AndroidJNISafe.FromReflectedMethod(num));
            }
            catch (Exception ex)
            {
                IntPtr methodId = AndroidJNISafe.GetMethodID(jclass, "<init>", signature);
                if (methodId != IntPtr.Zero)
                {
                    return(methodId);
                }
                throw ex;
            }
            finally
            {
                AndroidJNISafe.DeleteLocalRef(num);
            }
        }
コード例 #28
0
        public static IntPtr GetMethodID(IntPtr jclass, string methodName, string signature, bool isStatic)
        {
            IntPtr num = IntPtr.Zero;

            try
            {
                num = AndroidReflection.GetMethodMember(jclass, methodName, signature, isStatic);
                return(AndroidJNISafe.FromReflectedMethod(num));
            }
            catch (Exception ex)
            {
                IntPtr methodIdFallback = _AndroidJNIHelper.GetMethodIDFallback(jclass, methodName, signature, isStatic);
                if (methodIdFallback != IntPtr.Zero)
                {
                    return(methodIdFallback);
                }
                throw ex;
            }
            finally
            {
                AndroidJNISafe.DeleteLocalRef(num);
            }
        }
コード例 #29
0
        public static IntPtr GetFieldID(IntPtr jclass, string fieldName, string signature, bool isStatic)
        {
            IntPtr num1 = IntPtr.Zero;

            try
            {
                num1 = AndroidReflection.GetFieldMember(jclass, fieldName, signature, isStatic);
                return(AndroidJNISafe.FromReflectedField(num1));
            }
            catch (Exception ex)
            {
                IntPtr num2 = !isStatic?AndroidJNISafe.GetFieldID(jclass, fieldName, signature) : AndroidJNISafe.GetStaticFieldID(jclass, fieldName, signature);

                if (num2 != IntPtr.Zero)
                {
                    return(num2);
                }
                throw ex;
            }
            finally
            {
                AndroidJNISafe.DeleteLocalRef(num1);
            }
        }
コード例 #30
0
        public static ArrayType ConvertFromJNIArray <ArrayType>(IntPtr array)
        {
            Type elementType = typeof(ArrayType).GetElementType();

            if (AndroidReflection.IsPrimitive(elementType))
            {
                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));
            }
            if (elementType == typeof(string))
            {
                int      arrayLength = AndroidJNISafe.GetArrayLength(array);
                string[] array2      = new string[arrayLength];
                for (int i = 0; i < arrayLength; i++)
                {
                    IntPtr objectArrayElement = AndroidJNI.GetObjectArrayElement(array, i);
                    array2[i] = AndroidJNISafe.GetStringUTFChars(objectArrayElement);
                    AndroidJNISafe.DeleteLocalRef(objectArrayElement);
                }
                return((ArrayType)(object)array2);
            }
            if (elementType == typeof(AndroidJavaObject))
            {
                int arrayLength2           = AndroidJNISafe.GetArrayLength(array);
                AndroidJavaObject[] array3 = new AndroidJavaObject[arrayLength2];
                for (int j = 0; j < arrayLength2; j++)
                {
                    IntPtr objectArrayElement2 = AndroidJNI.GetObjectArrayElement(array, j);
                    array3[j] = new AndroidJavaObject(objectArrayElement2);
                    AndroidJNISafe.DeleteLocalRef(objectArrayElement2);
                }
                return((ArrayType)(object)array3);
            }
            throw new Exception("JNI: Unknown generic array type '" + elementType + "'");
        }