2017-02-18 52 views
2

我有从我的本地方法调用,并返回一个对象数组到本机代码的Java方法。如何从jobjectarray访问元素在JNI

对象数组的元素被设置为,

Object[] arr = new Object[10]; 
    arr[0] = new Integer(12); 
    arr[1] = new Float(25.5f); 

我接收在我的本机代码这个数组如下,

jobjectArray a = (jobjectArray)(*env)->CallStaticObjectMethodA(env, <class_id>, <method_id>, <parameter_list>); 

我有每个存储在元件中的数据类型对象阵列。因此,基于我如何可以访问我的本地方法相应的整数和浮点值的数据类型。

我尝试以下,

jobject obj = (*env)->GetObjectArrayElement(env, a, 0); 
    int num = (jint)obj; 

但值,即设置为num是不正确。

回答

0

当您将Integer转换为int时,Java会自动拆箱。但是,技工不存在C.你在做什么,走的是元素的内存地址,并将其解释为int

如果你想在C侧得到的Integerint,你将不得不调用intValue

jobject objInteger = (*env)->GetObjectArrayElement(env, a, 0);  

jclass cInteger = (*env)->FindClass(env, "java/lang/Integer"); 
jmethodID intValue = (*env)->GetMethodID(env, cInteger, "intValue", "()I"); 
int i = (*env)->CallIntMethod(env, objInteger, intValue); 
+0

非常感谢。有效。 – keerthana