5

我正在尝试使用QAndroidJniObject. 作为测试,我只调用了 2 个 Java 函数,一个返回一个 int,另一个返回一个字符串。

当返回一个 int 时,这段代码编译得很好:

jint a = QAndroidJniObject::callStaticMethod<jint>("HelloJava", "getInt");

但是,如果我将其更改为调用返回字符串的函数,则会失败:

jstring b = QAndroidJniObject::callStaticMethod<jstring>("HelloJava", "getString");

它失败了

错误:未定义对 '_jstring* QAndroidJniObject::callStaticMethod<_jstring*>(char const*, char const*)' 的引用

既然QAndroidJniObject::callStaticMethod是模板函数,那么如何为一种类型定义但为另一种类型未定义呢?

编辑:实际上,我只是用jobject, jbyteArray, jbooleanArray, jbyte,jboolean等进行了测试。这就是我发现的 - 只有整数类型,如jshort, jint, jlong,jboolean有效,而字符串、数组和对象都给出undefined reference错误。

4

2 回答 2

5

正如您在下表中看到的,整数类型是原始类型,而其余的是对象类型。因此,我建议您尝试改用:

jstring b = QAndroidJniObject::callStaticObjectMethod<jstring>("HelloJava", "getString")

这不是一个错误,而是一个功能。在官方立场上查看此问题跟踪器条目:

QAndroidJniObject/jstring:没有参考

于 2014-12-06T12:15:00.903 回答
3

尝试这个:

 QAndroidJniObject jb = QAndroidJniObject::callStaticObjectMethod("HelloJava", "getString", "()Ljava/lang/String;");
 QString b = jb.toString();
于 2016-07-05T02:09:19.150 回答