我正在尝试使用QAndroidJniObject
。作为测试,我只调用2个Java函数,一个返回一个int,另一个返回一个字符串。
返回int时,此代码编译正常:
jint a = QAndroidJniObject::callStaticMethod<jint>("HelloJava", "getInt");
但是,如果我将其更改为调用返回字符串的函数,则会失败:
jstring b = QAndroidJniObject::callStaticMethod<jstring>("HelloJava", "getString");
失败了
错误:未定义引用'_jstring * QAndroidJniObject :: callStaticMethod&lt; _jstring *&gt;(char const *,char 常量*)'
由于QAndroidJniObject::callStaticMethod
是一个模板函数,如何为一种类型定义但是为另一种类型定义?
修改:实际上,我刚刚使用jobject
,jbyteArray
,jbooleanArray
,jbyte
,jboolean
等进行了测试。这就是我发现的 - 只有jshort
,jint
,jlong
,jboolean
等整数类型才有效,而字符串,数组和对象都有undefined reference
。 1}}错误。
答案 0 :(得分:5)
正如您在following table中看到的,整数类型是原始的,而其余的是对象类型。因此,我建议您尝试使用:
jstring b = QAndroidJniObject::callStaticObjectMethod<jstring>("HelloJava", "getString")
这不是一个错误,而是一个功能。请参阅官方立场this issue tracker entry:
答案 1 :(得分:3)
试试这个:
QAndroidJniObject jb = QAndroidJniObject::callStaticObjectMethod("HelloJava", "getString", "()Ljava/lang/String;");
QString b = jb.toString();