gpt4 book ai didi

android - 从 jni 访问 ArrayList 的元素

转载 作者:行者123 更新时间:2023-11-29 16:01:37 26 4
gpt4 key购买 nike

我正在使用 android NDK,在 java 中,我将 arrayList 传递给该方法。它看起来像:

public static native float[] computeFeatures(ArrayList<double[]> list); 

我是用javah生成头文件,在C++中,这个方法转换成:

JNIEXPORT jfloatArray JNICALL Java_khoa_cspdemo_Main_computeFeatures(JNIEnv *env,
jclass jc, jobject obj);

现在,在 C++ 代码中,我想访问 ArrayList(列表)的每个元素,我如何获得它?请帮我!提前致谢!

最佳答案

这有点过于简单化了,但它应该可以帮助您入门。 ArrayList 只是对象,您无需担心 JNI 中的泛型。只需找到您要调用的方法,检查并确保 JNI 找到它们,然后调用该方法 ID。 native 数组需要通过 GetDoubleArrayElements 调用转换为 JNI。您应该阅读 Get<PrimitiveType>ArrayElements Routines 的文档

JNIEXPORT jfloatArray JNICALL Java_khoa_cspdemo_Main_computeFeatures(JNIEnv *env, jclass jc, jobject obj) {
jclass ArrayList_class = (*env)->FindClass(env, "java/util/ArrayList");
ArrayList_add_id = (*env)->GetMethodID(env, ArrayList_class, "add", "(Ljava/lang/Object;)Z");

const long int buf[] = { 0, 1, 2, 3, 42 };

jboolean isCopy;
jdouble *jbuf = (*jenv)->GetDoubleArrayElements(env, buf, &isCopy);

(*env)->CallBooleanMethod(env, obj, ArrayList_add_id, jbuf);
...
(*jenv)->ReleaseDoubleArrayElements(jenv, buf, jbuf, 0);


return JNI_OK;
}

关于android - 从 jni 访问 ArrayList 的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24146317/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com