如何在Qt中使用JNI创建字符串数组

时间:2016-07-10 17:47:08

标签: java android c++ qt java-native-interface

我必须在Qt中编写一些Android平台特定代码,并且需要使用JNI。我有一个如何创建一些对象的数组的问题。在这种情况下,我想从C ++构造一个字符串数组。

在下面的两个代码片段中,第一个创建了一个java字符串,它按预期工作。在第二个代码片段中,我想创建一个java字符串数组,但是我得到了调试消息:" Java字符串数组无效"所以我假设签名和/或参数传递给" QAndroidJniObject javaStringArray()"功能不正确。

我一直在查看文档,但无法找到或正确理解如何执行此操作。

我假设我必须发送我想构建的java字符串数组对象的大小。

感谢任何帮助!

QAndroidJniObject javaString("java/lang/String");
if (!javaString.isValid()) {
    qDebug() << "Java string not valid";
    return false;
}

QAndroidJniObject javaStringArray("[Ljava/lang/String;");
if (!javaStringArray.isValid()) {
    qDebug() << "Java string array not valid";
    return false;
}

1 个答案:

答案 0 :(得分:2)

QAndroidJniObject constructor you are using采用类名,所以我担心传递字符串数组签名是行不通的。您可能不得不弄脏并调用JNI NewObjectArray()。尝试类似:

QAndroidJniEnvironment env;
jobjectArray stringArray = env->NewObjectArray(5, env->FindClass("java/lang/String"), NULL);
QAndroidJniObject jniArray = QAndroidJniObject::fromLocalRef(stringArray);
// ...

这将创建一个包含5个空字符串的数组,如果您愿意,则创建transfer the ownership to QAndroidJniObject,否则您将不得不负责调用DeleteLocalRef()。