我正在尝试使用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 康斯特*)'
由于QAndroidJniObject::callStaticMethod
是模板函数,如何为一种类型定义它,而为另一种类型定义未定义?
编辑:实际上,我刚刚测试了jobject
,jbyteArray
,jbooleanArray
,jbyte
,jboolean
等。这就是我发现的 - 只有整数类型,如jshort
、jint
、jlong
、jboolean
工作,而字符串、数组和对象都给出了undefined reference
错误。
如下表所示,整数类型是基元类型,而其余类型是对象类型。因此,我建议您尝试使用:
jstring b = QAndroidJniObject::callStaticObjectMethod<jstring>("HelloJava", "getString")
这不是错误,而是一个功能。请参阅官方立场的此问题跟踪器条目:
QAndroidJniObject/jstring : no reference
试试这个:
QAndroidJniObject jb = QAndroidJniObject::callStaticObjectMethod("HelloJava", "getString", "()Ljava/lang/String;");
QString b = jb.toString();