public string getString(int index) { #if VERBOSE_LOGGING Debug.Log(MethodBase.GetCurrentMethod().Name); #endif JNIFind(); if (_jcJsonArray == IntPtr.Zero) { Debug.LogError("_jcJsonObject is not initialized"); return(null); } if (_jmGetString == IntPtr.Zero) { Debug.LogError("_jmGetString is not initialized"); return(null); } int arg1 = index; IntPtr result = AndroidJNI.CallObjectMethod(_instance, _jmGetString, new jvalue[] { new jvalue() { i = arg1 } }); if (result == IntPtr.Zero) { Debug.LogError("Failed to get String"); return(null); } return(AndroidJNI.GetStringUTFChars(result)); }
public string getMetaData() { #if VERBOSE_LOGGING Debug.Log(string.Format("Invoking {0}...", MethodBase.GetCurrentMethod().Name)); #endif JNIFind(); if (_instance == IntPtr.Zero) { Debug.LogError("_instance is not initialized"); return(null); } if (_jmGetMetaData == IntPtr.Zero) { Debug.LogError("_jmGetMetaData is not initialized"); return(null); } IntPtr result = AndroidJNI.CallObjectMethod(_instance, _jmGetMetaData, new jvalue[0] { }); if (result == IntPtr.Zero) { //optional field could be null return(null); } #if VERBOSE_LOGGING Debug.Log(string.Format("{0} Success", MethodBase.GetCurrentMethod().Name)); #endif String retVal = AndroidJNI.GetStringUTFChars(result); AndroidJNI.DeleteLocalRef(result); return(retVal); }
public T InvokeObjectCall <T>(string name, string sig, params object[] theArgs) { IntPtr methodID = AndroidJNI.GetMethodID(RawClass, name, sig); jvalue[] array = ConstructArgArray(theArgs); IntPtr intPtr = AndroidJNI.CallObjectMethod(raw, methodID, array); if (intPtr.Equals(IntPtr.Zero)) { return(default(T)); } ConstructorInfo constructor = typeof(T).GetConstructor(new Type[1] { intPtr.GetType() }); if (constructor != null) { return((T)constructor.Invoke(new object[1] { intPtr })); } Type typeFromHandle = typeof(T); return((T)Marshal.PtrToStructure(intPtr, typeFromHandle)); }
public float?getUserRating() { #if VERBOSE_LOGGING Debug.Log(string.Format("Invoking {0}...", MethodBase.GetCurrentMethod().Name)); #endif JNIFind(); if (_instance == IntPtr.Zero) { Debug.LogError("_instance is not initialized"); return(0); } if (_jmGetUserRating == IntPtr.Zero) { Debug.LogError("_jmGetUserRating is not initialized"); return(0); } IntPtr result = AndroidJNI.CallObjectMethod(_instance, _jmGetUserRating, new jvalue[0] { }); if (result == IntPtr.Zero) { return(null); } float retVal = OuyaUnityPlugin.getFloat(result); AndroidJNI.DeleteLocalRef(result); return(retVal); }
public void addScreenshot(Bitmap bitmap) { #if VERBOSE_LOGGING Debug.Log(string.Format("Invoking {0}...", MethodBase.GetCurrentMethod().Name)); #endif JNIFind(); if (_instance == IntPtr.Zero) { Debug.LogError("_instance is not initialized"); return; } if (_jmAddScreenshot == IntPtr.Zero) { Debug.LogError("_jmAddScreenshot is not initialized"); return; } if (null == bitmap) { Debug.LogError("bitmap is not initialized"); return; } if (bitmap.GetInstance() == IntPtr.Zero) { Debug.LogError("bitmap.Instance is not initialized"); return; } IntPtr arg1 = bitmap.GetInstance(); IntPtr retVal = AndroidJNI.CallObjectMethod(_instance, _jmAddScreenshot, new jvalue[] { new jvalue() { l = arg1 } }); }
public void ConnectRequest(string addr) { var connectMethod = AndroidJNI.GetMethodID(this.bleManagerCls, "connect", "(Ljava/lang/String;)Lcom/toio/ble/BleDeviceObj;"); this.argBuilder.Clear().Append(ArgJvalueBuilder.GenerateJvalue(addr)); AndroidJNI.CallObjectMethod(this.javaBleManagerObj, connectMethod, this.argBuilder.Build()); }
/// <summary> /// Invokes a method that returns an object. /// </summary> /// <returns>The object call.</returns> /// <param name="name">Name.</param> /// <param name="sig">Sig.</param> /// <param name="theArgs">The arguments.</param> /// <typeparam name="T">The 1st type parameter.</typeparam> public T InvokeObjectCall <T>(string name, string sig, params object[] theArgs) { IntPtr methodId = AndroidJNI.GetMethodID(RawClass, name, sig); jvalue[] jArgs = ConstructArgArray(theArgs); try { IntPtr val = AndroidJNI.CallObjectMethod(raw, methodId, jArgs); if (val.Equals(IntPtr.Zero)) { return(default(T)); } ConstructorInfo ctor = typeof(T).GetConstructor(new Type[] { val.GetType() }); if (ctor != null) { return((T)ctor.Invoke(new object[] { val })); } Type t = typeof(T); return((T)Marshal.PtrToStructure(val, t)); } finally { AndroidJNIHelper.DeleteJNIArgArray(theArgs, jArgs); } }
public static string CallStr(this AndroidJavaObject ajo, string methodName, params object[] args) { #if UNITY_2018_2_OR_NEWER // A fix for a regression issue introduced in Unity 2018.2 // Details: https://issuetracker.unity3d.com/issues/android-androidjavaobject-dot-call-crashes-with-fatal-signal-11-sigsegv if (args == null) { args = new object[] { null }; } IntPtr methodID = AndroidJNIHelper.GetMethodID <string>(ajo.GetRawClass(), methodName, args, false); jvalue[] jniArgs = AndroidJNIHelper.CreateJNIArgArray(args); try { IntPtr returnValue = AndroidJNI.CallObjectMethod(ajo.GetRawObject(), methodID, jniArgs); if (IntPtr.Zero != returnValue) { var val = AndroidJNI.GetStringUTFChars(returnValue); AndroidJNI.DeleteLocalRef(returnValue); return(val); } } finally { AndroidJNIHelper.DeleteJNIArgArray(args, jniArgs); } return(null); #else return(CallSafe <string>(ajo, methodName, args)); #endif }
/** * Unity AndroidJavaObject throws an exception if a call from Java returns null * so we have our own implementation. */ public static AndroidJavaObject cjoReturningNull( this AndroidJavaObject javaObject, string methodName, params object[] args ) { if (args == null) { args = new object[1]; } var methodId = AndroidJNIHelper.GetMethodID <AndroidJavaObject>( javaObject.GetRawClass(), methodName, args, false ); var jniArgArray = AndroidJNIHelper.CreateJNIArgArray(args); try { var returned = AndroidJNI.CallObjectMethod( javaObject.GetRawObject(), methodId, jniArgArray ); if (returned == IntPtr.Zero) { return(null); } else { try { return(ajoCreator(new object[] { returned })); } finally { AndroidJNI.DeleteLocalRef(returned); } } } finally { AndroidJNIHelper.DeleteJNIArgArray(args, jniArgArray); } }
public string toString() { #if VERBOSE_LOGGING Debug.Log(MethodBase.GetCurrentMethod().Name); #endif JNIFind(); if (_jcJsonObject == IntPtr.Zero) { Debug.LogError("_jcJsonObject is not initialized"); return(null); } if (_jmToString == IntPtr.Zero) { Debug.LogError("_jmHas is not initialized"); return(null); } IntPtr retVal = AndroidJNI.CallObjectMethod(_instance, _jmToString, new jvalue[0]); if (retVal == IntPtr.Zero) { Debug.LogError("Failed to get string"); return(null); } string result = AndroidJNI.GetStringUTFChars(retVal); AndroidJNI.DeleteLocalRef(retVal); return(result); }
public List <Breadcrumb> GetBreadcrumbs() { List <Breadcrumb> breadcrumbs = new List <Breadcrumb>(); if (!CanRunJNI()) { return(breadcrumbs); } bool isAttached = bsg_unity_isJNIAttached(); if (!isAttached) { AndroidJNI.AttachCurrentThread(); } var javaBreadcrumbs = CallNativeObjectMethod("getBreadcrumbs", "()Ljava/util/List;", new object[] {}); var iterator = AndroidJNI.CallObjectMethod(javaBreadcrumbs, CollectionIterator, new jvalue[] {}); while (AndroidJNI.CallBooleanMethod(iterator, IteratorHasNext, new jvalue[] {})) { var crumb = AndroidJNI.CallObjectMethod(iterator, IteratorNext, new jvalue[] {}); breadcrumbs.Add(ConvertToBreadcrumb(crumb)); AndroidJNI.DeleteLocalRef(crumb); } AndroidJNI.DeleteLocalRef(javaBreadcrumbs); AndroidJNI.DeleteLocalRef(iterator); if (!isAttached) { AndroidJNI.DetachCurrentThread(); } return(breadcrumbs); }
public string getString(string name) { #if VERBOSE_LOGGING Debug.Log(MethodBase.GetCurrentMethod().Name); #endif JNIFind(); if (_jcJsonObject == IntPtr.Zero) { Debug.LogError("_jcJsonObject is not initialized"); return(null); } if (_jmGetString == IntPtr.Zero) { Debug.LogError("_jmGetString is not initialized"); return(null); } IntPtr arg1 = AndroidJNI.NewStringUTF(name); IntPtr result = AndroidJNI.CallObjectMethod(_instance, _jmGetString, new jvalue[] { new jvalue() { l = arg1 } }); AndroidJNI.DeleteLocalRef(arg1); if (result == IntPtr.Zero) { Debug.LogError("Failed to get String"); return(null); } return(AndroidJNI.GetStringUTFChars(result)); }
public org.json.JSONArray getJSONArray(string name) { #if VERBOSE_LOGGING Debug.Log(MethodBase.GetCurrentMethod().Name); #endif JNIFind(); if (_jcJsonObject == IntPtr.Zero) { Debug.LogError("_jcJsonObject is not initialized"); return(null); } if (_jmGetJsonArray == IntPtr.Zero) { Debug.LogError("_jmGetJsonArray is not initialized"); return(null); } IntPtr arg1 = AndroidJNI.NewStringUTF(name); IntPtr result = AndroidJNI.CallObjectMethod(_instance, _jmGetJsonArray, new jvalue[] { new jvalue() { l = arg1 } }); AndroidJNI.DeleteLocalRef(arg1); if (result == IntPtr.Zero) { Debug.LogError("Failed to get JSONArray"); return(null); } org.json.JSONArray retVal = new JSONArray(result); return(retVal); }
public org.json.JSONArray put(int index, String value) { #if VERBOSE_LOGGING Debug.Log(MethodBase.GetCurrentMethod().Name); #endif JNIFind(); if (_jcJsonArray == IntPtr.Zero) { Debug.LogError("_jcJsonObject is not initialized"); return(null); } if (_jmPut == IntPtr.Zero) { Debug.LogError("_jmPut is not initialized"); return(null); } int arg1 = index; IntPtr arg2 = AndroidJNI.NewStringUTF(value); IntPtr result = AndroidJNI.CallObjectMethod(_instance, _jmPut, new jvalue[] { new jvalue() { i = arg1 }, new jvalue() { l = arg2 } }); AndroidJNI.DeleteLocalRef(arg2); return(this); }
/// <summary> /// Helper method for creating a java HashMap from a c# dictionary /// </summary> /// <param name="dictionary">dictionary to use for HashMap creation</param> /// <returns>AndroidJovaObject referencing a java HashMap</returns> protected AmazonJavaWrapper DictionaryToAndroidHashMap(Dictionary <String, String> dictionary) { AndroidJNI.PushLocalFrame(10); AndroidJavaObject javaHashMap = new AndroidJavaObject("java.util.HashMap"); //revert to manual JNI calls due to apparent bug in calling put on a hashmap object //from the AndroidJavaObject class IntPtr putMethod = AndroidJNIHelper.GetMethodID(javaHashMap.GetRawClass(), "put", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"); object[] keyValSet = new object[2]; foreach (KeyValuePair <string, string> kv in dictionary) { using (AndroidJavaObject key = new AndroidJavaObject("java.lang.String", kv.Key)){ using (AndroidJavaObject value = new AndroidJavaObject("java.lang.String", kv.Value)){ keyValSet[0] = key; keyValSet[1] = value; jvalue[] methodValues = AndroidJNIHelper.CreateJNIArgArray(keyValSet); AndroidJNI.CallObjectMethod(javaHashMap.GetRawObject(), putMethod, methodValues); } } } AndroidJNI.PopLocalFrame(System.IntPtr.Zero); return(new AmazonJavaWrapper(javaHashMap)); }
private static AndroidJavaObject CreateJavaMapFromDictainary(IDictionary<string, string> parameters) { AndroidJavaObject javaMap = new AndroidJavaObject("java.util.HashMap"); IntPtr putMethod = AndroidJNIHelper.GetMethodID( javaMap.GetRawClass(), "put", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"); object[] args = new object[2]; foreach (KeyValuePair<string, string> kvp in parameters) { using (AndroidJavaObject k = new AndroidJavaObject( "java.lang.String", kvp.Key)) { using (AndroidJavaObject v = new AndroidJavaObject( "java.lang.String", kvp.Value)) { args[0] = k; args[1] = v; AndroidJNI.CallObjectMethod(javaMap.GetRawObject(), putMethod, AndroidJNIHelper.CreateJNIArgArray(args)); } } } return javaMap; }
// Calls a custom Graph API method with the key/value pairs in the Dictionary. Pass in a null dictionary if no parameters are needed. public static void graphRequest(string graphPath, string httpMethod, Dictionary <string, string> parameters) { if (Application.platform != RuntimePlatform.Android) { return; } // load up the Bundle using (var bundle = new AndroidJavaObject("android.os.Bundle")) { var putStringMethod = AndroidJNI.GetMethodID(bundle.GetRawClass(), "putString", "(Ljava/lang/String;Ljava/lang/String;)V"); var args = new object[2]; // add all our dictionary elements into the Bundle if (parameters != null) { foreach (var kv in parameters) { args[0] = new AndroidJavaObject("java.lang.String", kv.Key); args[1] = new AndroidJavaObject("java.lang.String", kv.Value); AndroidJNI.CallObjectMethod(bundle.GetRawObject(), putStringMethod, AndroidJNIHelper.CreateJNIArgArray(args)); } } // call off to java land _facebookPlugin.Call("graphRequest", graphPath, httpMethod, bundle); } }
public static string safeCallStringMethod(AndroidJavaObject javaObject, string methodName, params object[] args) { if (args == null) { args = new object[] { null } } ; IntPtr methodID = AndroidJNIHelper.GetMethodID <string>(javaObject.GetRawClass(), methodName, args, false); jvalue[] jniArgs = AndroidJNIHelper.CreateJNIArgArray(args); try { IntPtr returnValue = AndroidJNI.CallObjectMethod(javaObject.GetRawObject(), methodID, jniArgs); if (IntPtr.Zero != returnValue) { var val = AndroidJNI.GetStringUTFChars(returnValue); AndroidJNI.DeleteLocalRef(returnValue); return(val); } } finally { AndroidJNIHelper.DeleteJNIArgArray(args, jniArgs); } return(null); }
private System.IntPtr GetScanner() { var getScanner = AndroidJNI.GetMethodID(bleManagerCls, "getScanner", "()Lcom/toio/ble/BleScannerObj;"); var scanner = AndroidJNI.CallObjectMethod(this.javaBleManagerObj, getScanner, null); return(scanner); }
private static AndroidJavaObject CreateAndroidTargetInfo(Dictionary <string, List <string> > info) { AndroidJavaObject androidJavaObject = new AndroidJavaObject("java.util.HashMap"); foreach (KeyValuePair <string, List <string> > item in info) { AndroidJavaObject androidJavaObject2 = new AndroidJavaObject("java.util.LinkedList"); foreach (string item2 in item.Value) { AndroidJavaObject androidJavaObject3 = new AndroidJavaObject("java.lang.String", item2); androidJavaObject2.Call <bool>("add", new object[1] { androidJavaObject3 }); } AndroidJavaObject androidJavaObject4 = new AndroidJavaObject("java.lang.String", item.Key); IntPtr methodID = AndroidJNIHelper.GetMethodID(androidJavaObject.GetRawClass(), "put", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"); AndroidJNI.CallObjectMethod(args: AndroidJNIHelper.CreateJNIArgArray(new object[2] { androidJavaObject4, androidJavaObject2 }), obj: androidJavaObject.GetRawObject(), methodID: methodID); } return(androidJavaObject); }
public Editor edit() { #if VERBOSE_LOGGING Debug.Log(string.Format("Invoking {0}...", MethodBase.GetCurrentMethod().Name)); #endif JNIFind(); if (_instance == IntPtr.Zero) { Debug.LogError("_instance is not initialized"); return(null); } if (_jmEdit == IntPtr.Zero) { Debug.LogError("_jmEdit is not initialized"); return(null); } IntPtr retVal = AndroidJNI.CallObjectMethod(_instance, _jmEdit, new jvalue[0] { }); if (retVal == IntPtr.Zero) { Debug.LogError("Edit returned null"); return(null); } #if VERBOSE_LOGGING Debug.Log(string.Format("{0} Success", MethodBase.GetCurrentMethod().Name)); #endif IntPtr globalRef = AndroidJNI.NewGlobalRef(retVal); AndroidJNI.DeleteLocalRef(retVal); return(new OuyaMod.Editor(globalRef)); }
//turn a dictionary into hashmap, to pass it in JNI private static AndroidJavaObject ConvertHashMap(Dictionary <string, string> dict) { AndroidJavaObject obj_HashMap = new AndroidJavaObject("java.util.HashMap"); IntPtr method_Put = AndroidJNIHelper.GetMethodID(obj_HashMap.GetRawClass(), "put", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"); if (dict == null) { return(null); } object[] args = new object[2]; foreach (KeyValuePair <string, string> kvp in dict) { using (AndroidJavaObject k = new AndroidJavaObject("java.lang.String", kvp.Key)) { using (AndroidJavaObject v = new AndroidJavaObject("java.lang.String", kvp.Value)) { args[0] = k; args[1] = v; AndroidJNI.CallObjectMethod(obj_HashMap.GetRawObject(), method_Put, AndroidJNIHelper.CreateJNIArgArray(args)); } } } return(obj_HashMap); }
public InputStream openFile(string filename) { #if VERBOSE_LOGGING Debug.Log(string.Format("Invoking {0}...", MethodBase.GetCurrentMethod().Name)); #endif JNIFind(); if (_instance == IntPtr.Zero) { Debug.LogError("_instance is not initialized"); return(null); } if (_jmOpenFile == IntPtr.Zero) { Debug.LogError("_jmOpenFile is not initialized"); return(null); } IntPtr arg1 = AndroidJNI.NewStringUTF(filename); IntPtr localRef = AndroidJNI.CallObjectMethod(_instance, _jmOpenFile, new jvalue[] { new jvalue() { l = arg1 } }); AndroidJNI.DeleteLocalRef(arg1); if (localRef == IntPtr.Zero) { Debug.LogError("_jmOpenFile returned null"); return(null); } IntPtr globalRef = AndroidJNI.NewGlobalRef(localRef); AndroidJNI.DeleteLocalRef(localRef); return(new InputStream(globalRef)); }
public string getDeviceName() { if (_instance == IntPtr.Zero) { Debug.LogError("_instance is not initialized"); return(null); } if (_jmGetDeviceName == IntPtr.Zero) { Debug.LogError("_jmGetDeviceName is not initialized"); return(null); } IntPtr result = AndroidJNI.CallObjectMethod(_instance, _jmGetDeviceName, new jvalue[0]); if (result == IntPtr.Zero) { //might not be connected //Debug.LogError("Failed to get device name"); return(null); } String retVal = AndroidJNI.GetStringUTFChars(result); AndroidJNI.DeleteLocalRef(result); return(retVal); }
public List <string> getFilenames() { #if VERBOSE_LOGGING Debug.Log(string.Format("Invoking {0}...", MethodBase.GetCurrentMethod().Name)); #endif JNIFind(); List <string> retVal = new List <string>(); if (_instance == IntPtr.Zero) { Debug.LogError("_instance is not initialized"); return(retVal); } if (_jmGetFilenames == IntPtr.Zero) { Debug.LogError("_jmGetFilenames is not initialized"); return(retVal); } IntPtr result = AndroidJNI.CallObjectMethod(_instance, _jmGetFilenames, new jvalue[0] { }); if (result == IntPtr.Zero) { Debug.LogError("_jmGetFilenames returned null"); return(retVal); } #if VERBOSE_LOGGING Debug.Log(string.Format("{0} Success", MethodBase.GetCurrentMethod().Name)); #endif retVal = OuyaUnityPlugin.getStringList(result); AndroidJNI.DeleteLocalRef(result); return(retVal); }
public static AndroidJavaObject ConvertToHashMap(IDictionary <string, string> stringStringDictionary) { if (stringStringDictionary == null) { return(null); } var objHashMap = new AndroidJavaObject("java.util.HashMap"); System.IntPtr methodPut = AndroidJNIHelper.GetMethodID(objHashMap.GetRawClass(), "put", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"); object[] args = new object[2]; foreach (KeyValuePair <string, string> keyValuePair in stringStringDictionary) { using (AndroidJavaObject javaStringKey = new AndroidJavaObject(JavaStringClass, keyValuePair.Key)) { using (AndroidJavaObject javaStringValue = new AndroidJavaObject(JavaStringClass, keyValuePair.Value)) { args[0] = javaStringKey; args[1] = javaStringValue; AndroidJNI.CallObjectMethod(objHashMap.GetRawObject(), methodPut, AndroidJNIHelper.CreateJNIArgArray(args)); } } } return(objHashMap); }
protected internal static AndroidJavaObject GetHashMapFromDictionary(Dictionary <string, object> dict) { // quick out if nothing in the dict param if (dict == null || dict.Count <= 0) { return(null); } AndroidJavaObject hashMap = new AndroidJavaObject("java.util.HashMap"); IntPtr putMethod = AndroidJNIHelper.GetMethodID(hashMap.GetRawClass(), "put", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"); object[] args = new object[2]; foreach (KeyValuePair <string, object> kvp in dict) { using (var key = new AndroidJavaObject("java.lang.String", kvp.Key)) { using (var value = new AndroidJavaObject("java.lang.String", kvp.Value)) { args[0] = key; args[1] = value; AndroidJNI.CallObjectMethod(hashMap.GetRawObject(), putMethod, AndroidJNIHelper.CreateJNIArgArray(args)); } } } return(hashMap); }
public override void logEvent(string eventId, Hashtable parameters) { using (AndroidJavaObject obj_HashMap = new AndroidJavaObject("java.util.HashMap")) { // Call 'put' via the JNI instead of using helper classes to avoid: // "JNI: Init'd AndroidJavaObject with null ptr!" IntPtr method_Put = AndroidJNIHelper.GetMethodID(obj_HashMap.GetRawClass(), "put", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"); object[] args = new object[2]; foreach (DictionaryEntry kvp in parameters) { using (AndroidJavaObject k = new AndroidJavaObject("java.lang.String", kvp.Key + "")) { using (AndroidJavaObject v = new AndroidJavaObject("java.lang.String", kvp.Value + "")) { args[0] = k; args[1] = v; AndroidJNI.CallObjectMethod(obj_HashMap.GetRawObject(), method_Put, AndroidJNIHelper.CreateJNIArgArray(args)); } } } cls_FlurryAgent.CallStatic("logEvent", eventId, obj_HashMap); } }
public OuyaMod create() { JNIFind(); if (_instance == IntPtr.Zero) { Debug.LogError("_instance is not initialized"); return(null); } if (_jmCreate == IntPtr.Zero) { Debug.LogError("_jmCreate is not initialized"); return(null); } IntPtr retVal = AndroidJNI.CallObjectMethod(_instance, _jmCreate, new jvalue[0] { }); if (retVal == IntPtr.Zero) { Debug.LogError("Create returned null"); return(null); } IntPtr globalRef = AndroidJNI.NewGlobalRef(retVal); AndroidJNI.DeleteLocalRef(retVal); return(new OuyaMod(globalRef)); }
public org.json.JSONObject getJSONObject(int index) { #if VERBOSE_LOGGING Debug.Log(MethodBase.GetCurrentMethod().Name); #endif JNIFind(); if (_jcJsonArray == IntPtr.Zero) { Debug.LogError("_jcJsonObject is not initialized"); return(null); } if (_jmGetJsonObject == IntPtr.Zero) { Debug.LogError("_jmGetJsonObject is not initialized"); return(null); } int arg1 = index; IntPtr result = AndroidJNI.CallObjectMethod(_instance, _jmGetJsonObject, new jvalue[] { new jvalue() { i = arg1 } }); if (result == IntPtr.Zero) { Debug.LogError("Failed to get JSONObject"); return(null); } org.json.JSONObject retVal = new JSONObject(result); return(retVal); }