我正在尝试使用QAndroidJniObject。作为一个测试,我只调用2个Java函数,一个返回int,另一个返回字符串。
当返回int时,这段代码编译得很好:
jint a = QAndroidJniObject::callStaticMethod<jint>("HelloJava", "getInt");但是,如果我将其更改为调用返回字符串的函数,则会失败:
jstring b = QAndroidJniObject::callStaticMethod<jstring>("HelloJava", "getString");它失败了
错误:对“QAndroidJniObject::callStaticMethod<_jstring*>(char _jstring* const*,char const*”的未定义引用
既然QAndroidJniObject::callStaticMethod是一个模板函数,那么如何为一种类型定义它,而为另一种类型定义它呢?
编辑:实际上,我只是用jobject、jbyteArray、jbooleanArray、jbyte、jboolean等进行了测试。我发现的只有整数类型,如jshort、jint、jlong、jboolean工作,而字符串、数组和对象都会出现undefined reference错误。
发布于 2014-12-06 12:15:00
正如您在下表中看到的那样,整数类型是基本类型,而其余类型是对象类型。因此,我建议您尝试使用:
jstring b = QAndroidJniObject::callStaticObjectMethod<jstring>("HelloJava", "getString")这不是一个bug,而是一个特性。关于官方立场,请参见此问题跟踪器条目:
发布于 2016-07-05 02:09:19
试试这个:
QAndroidJniObject jb = QAndroidJniObject::callStaticObjectMethod("HelloJava", "getString", "()Ljava/lang/String;");
QString b = jb.toString();https://stackoverflow.com/questions/27331347
复制相似问题