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

How to create a string array using JNI in Qt

本文关键字:JNI 创建 字符串 数组 Qt      更新时间:2023-10-16

我必须用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;
}

您使用的 QAndroidJniObject 构造函数采用类名,因此恐怕传递字符串数组签名不起作用。你可能不得不弄脏你的手并调用JNI NewObjectArray()。尝试类似操作:

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

这将创建一个包含 5 个空字符串的数组,如果您愿意,请将所有权转移到 QAndroidJniObject,否则您必须注意调用 DeleteLocalRef()。