Qt не компилирует callStaticObjectMethod()
Я написал следующий код из этого вопроса, и он был скомпилирован и работал отлично:
QAndroidJniObject str = QAndroidJniObject::callStaticObjectMethod<jstring>(
"org/.../TestClass"
,"staticMethod");
Теперь я изменил метод Java, и ему нужен входной параметр типа строки.
Java-код:
public class TestClass{
public string str;
public TestClass() {
str = "Test From Java";
}
public static String staticMethod(String str) {
return "Test From Java, "+str;
}
}
Но добавление сигнатуры метода и входного параметра у меня не работает. Я написал этот код для вызова статического метода в упомянутом Java-классе с использованием JNI:
QAndroidJniObject val = QAndroidJniObject::fromString("Test String");
QAndroidJniObject str = QAndroidJniObject::callStaticObjectMethod<jstring>(
"org/.../TestClass"
,"staticMethod"
,"(Ljava/lang/String;)Ljava/lang/String;"
,val.object<jstring>());
Но Qt creator не собирает его, печатая эту ошибку:
...testclass.cpp:21: error: no matching function for call to 'QAndroidJniObject::callStaticObjectMethod( const char [36], const char [13], const char [39], _jstring*)' ,val.object<jstring>()); ^
Спасибо за любую помощь.
Я тоже пробовал callStaticMethod
За это:
jstring str = QAndroidJniObject::callStaticMethod<jstring>(
"org/.../TestClass"
,"staticMethod"
,"(Ljava/lang/String;)Ljava/lang/String;"
,val.object<jstring>());
Я получил следующую ошибку:
... \ testclass.cpp: 21: ошибка: неопределенная ссылка на '_jstring * QAndroidJniObject:: callStaticMethod <_jstring *> (char const *, char const *, char const *,...)'
## Я также пробовал callStaticObjectMethod без параметра шаблона ##
QAndroidJniObject str = QAndroidJniObject:: callStaticObjectMethod ("org /... TextClass", "staticMethod", "(Ljava / lang / String;) Ljava / lang / String;", val.object ());
Всегда возвращает пустую строку. Я не уверен, действительно ли это пусто или нет. я использую qCritical() << str.toString();
чтобы напечатать строку, но тогда выводится пустой qout!
1 ответ
Пытаться:
QAndroidJniObject str = QAndroidJniObject::callStaticObjectMethod(
"org/.../TestClass"
,"staticMethod"
,"(Ljava/lang/String;)Ljava/lang/String;"
,val.object<jstring>());
Я думаю, что эта функция не принимает параметр шаблона.
Чем вы можете сделать:
str.toString() //returns QString
И убедитесь, что вы импортировали исходные файлы Java в свою сборку Android. Например, если ваши классы Java находятся под android-sources
Папка добавить это в ваш.pro файл:
ANDROID_PACKAGE_SOURCE_DIR = $$PWD/android-sources