Я пытаюсь использовать 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 jb = QAndroidJniObject::callStaticObjectMethod("HelloJava", "getString", "()Ljava/lang/String;");
QString b = jb.toString();