如何在Qt中使用JNI创建字符串数组
How to create a string array using JNI in Qt
我必须用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()。
相关文章:
- 为 NewObjectA() 函数创建 jvalues 的参数数组时出错 - JNI Invocation API
- Winapi - SetWindowLongPtr in ShutdownBlockReason创建/销毁JNI本机代码
- 如何从 C/C++ 在 JNI for Java 中创建 UTF16 字符串?
- 设置 JVM 通过 JNI 初始化时创建的线程数
- 我能否通过 JNI 调试在本机代码中创建的 JVM?
- 如何使用 JNI 创建原生类?
- 使用JNI和OPENCV创建的LIB的未定义符号
- 在 JNI 中创建新对象
- 我可以创建一个JNI调用以提升从Java的C 光纤
- 在创建新对象时,尝试将参数提供给JNI对象的构造函数时会出现错误
- 通过 JNI 从应用程序创建 JVM 后C++找不到类
- 在JNI创建的dll中使用dll的问题
- 使用JNI调用API创建一个java7JVM
- JavaH 无法为 JNI 类创建 C 头文件
- Pthread,杀死JNI创建的线程
- Scala:在JNI方法中创建/使用自定义类型
- 你能不能使用 JNI 在从 java 调用的 c++ 函数中创建一个新的 JVM
- JNI - 创建另一个C++类的实例
- 在Android NDK上通过JNI从OpenGL ES Framebuffer创建位图图像
- 如何在Qt中使用JNI创建字符串数组