读书人

JNI返回含有byte[]属性的对象的有关问

发布时间: 2013-07-09 09:50:47 作者: rapoo

JNI返回含有byte[]属性的对象的问题
本帖最后由 Java_Devil 于 2013-07-04 21:11:38 编辑

JNIEXPORT jobject JNICALL Java_com_test_Emv_getStu(JNIEnv *env, jobject obj) {
jclass clazz = (*env)->FindClass(env, "com/test/Student");
jmethodID constrocMID = (*env)->GetMethodID(env, clazz, "<init>",
"(ILjava/lang/String;)V");
char* response = "\x01\xA1";
int size = strlen(response);
jbyteArray ret = (*env)->NewByteArray(env, size);
(*env)->SetByteArrayRegion(env, ret, 0, size, (jbyte*) response);
jobject param_obj = (*env)->NewObject(env, clazz, constrocMID, 11, ret);
return param_obj;
}

我需要返回一个对象,对象里有一个byte[]的属性,。我这里每次运行到最后一步
jobject param_obj = (*env)->NewObject(env, clazz, constrocMID, 11, ret);
就报错了。、
下面是对应的测试的javaBean
public class Student {
public int age;
public byte[] code;

public Student() {

}

public Student(int str, byte[] buff) {
this.age = str;
this.code = buff;
}
}

请帮忙分析下哪里错了? JNI 对象 Java C
[解决办法]
看你的构造函数签名是"(ILjava/lang/String;)V",
但是你调用的时候第二个参数传入的却是一个byte数组,
如果不是笔误的话,你可以先用NewStringUTF把byte数组转成String,再调用构造函数
[解决办法]
(*env)->SetByteArrayRegion(env, ret, 0, size, (jbyte*) response);
这一行, 把指针类型转换(jbyte*) 去掉, 直接传char*

读书人网 >Android

热点推荐