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
Другие вопросы по тегам