jni之list

jni 中参数是list,如何获取list的中的数据
首先通过一个例子来说明其中的原理吧
java 中的函数原型
public static native int init(List ca_list);
jni 中的函数原型
jint Java_com_test_JNIclass_init(JNIEnv *env, jobject this, jobject ca_list_obj);

首先对于jni来说List 也是一个object对象,我们需要找到List的类
jclass list_cls = (*env)->FindClass(env, “java/util/List”);
然后找到List的get方法的method id
jmethodID list_get_method = (*env)->GetMethodID(env, list_cls,
“get”, “(I)Ljava/lang/Object;”);
由于需要遍历list的item,所以需要拿到list的size,这就需要找到List的size方法
jmethodID list_size_method = (*env)->GetMethodID(env, list_cls, “size”, “()I”);
此时通过size方法拿到list的size
int list_ca_size = (*env)->CallIntMethod(env, ca_list_obj, list_size_method);
拿到size 之后,就可以逐个遍历list的链表了
int index;
for(index=0;index<list_ca_size;index++) {
jobject cert_obj = (*env)->CallObjectMethod(env, ca_list_obj, list_get_method, index);
jclass cert_cls = (jclass)(*env)->GetObjectClass(env, cert_obj);

}

发布了16 篇原创文章 · 获赞 6 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/qq_41163331/article/details/83012823
JNI