我有一个java方法,它从我的native方法调用,并返回一个对象数组到本机代码。
对象数组的元素设置为
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 :(得分:2)
当您将Integer
转换为int
时,Java会自动取消装箱。但是那个机制在C中并不存在。你正在做的是获取元素的内存地址并将其解释为int
。
如果您希望从int
方Integer
获得C
,则必须致电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);