我必须在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;
}
答案 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()。