gpt4 book ai didi

java - JNI - 从 C++ Vector 实例化 Java ArrayList

转载 作者:行者123 更新时间:2023-11-28 05:54:42 32 4
gpt4 key购买 nike

我正在尝试创建一个 ArrayList通过使用 native 函数调用其方法来包含 Java 类。 Java 类 ExampleClass看起来像这样:

public class ExampleClass {
private int _exampleID;
private String _exampleName;
public ExampleClass(int exampleID, String exampleName) {
_exampleID = exampleID;
_exampleName = exampleName;
}
}

在原生方面,我有一个免费类(class) ExampleClass_Cpp它被加载到一个 vector 中。这是 native 实现:

static thread_local JNIEnv* env;
static jclass java_util_ArrayList = static_cast<jclass>(env->NewGlobalRef(env->FindClass("java/util/ArrayList")));
static jmethodID java_util_ArrayList_= env->GetMethodID(java_util_ArrayList, "<init>", "(I)V");
jmethodID java_util_ArrayList_add = env->GetMethodID(java_util_ArrayList, "add", "(Ljava/lang/Object;)V");

JNIEXPORT jobject JNICALL cppv2javaAL(JNIEnv *env) {

std::vector<ExampleClass_Cpp> vector;
jclass J_Class_Example = env->FindClass("app/androidndkproject/ExampleClass");
jmethodID methodId = env->GetMethodID(J_Class_Example, "<init>", "(I)V");

jobject result = env->NewObject(java_util_ArrayList, java_util_ArrayList_, vector.size());
for (auto const &Ex: vector) {
jobject J_Obj_Example = env->NewObject(J_Class_Example, methodId, Ex.getExampleID(), Ex.getExampleName());
env->CallVoidMethod(result, java_util_ArrayList_add, J_Obj_Example);
env->DeleteLocalRef(J_Obj_Example);
}
return result;
}

我在使用相应的 JNI 映射时遇到了一些困难。我知道我现在的 Java 调用是不正确的,如下所示: public native ArrayList<ExampleClass> cpp2java(); .

创建 ArrayList 的正确方法是什么?通过 JNI(或者上面有什么问题)?应该是jobjectArray ?

如果它是用 Java 编写的(我想使用它的上下文),它将是:

public List<ExampleClass> exampleList = new ArrayList<ExampleClass>();

提前致谢。

最佳答案

首先,ArrayList.add() 返回 boolean 值,你应该使用

CallBooleanMethod

也许有更好的方法,但根据我的经验,你可以

在java中创建一个空列表

public List<ExampleClass> exampleList = new ArrayList<ExampleClass>()

将 exampleList 作为对 cpp 的引用传递,例如:

JNIEXPORT jobject JNICALL cppv2javaAL(JNIEnv *env, jobject jlist) {
...
env->CallBooleanMethod(jlist, java_util_ArrayList_add, J_Obj_Example);
...
}

关于java - JNI - 从 C++ Vector 实例化 Java ArrayList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34447025/

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