Вызов простого Java-статического метода через JNI не работает, хотя C++ компилирует и запускает его

Учитывая этот класс Java со статическим методом:

public class TestClass{
    public string str;
    public TestClass() {
        str = "Test From Java";
    }
    public static String staticMethod() {
        return "Test From Java";
    }
}

Я написал эти строки кода в файле C++:

QAndroidJniObject str =  QAndroidJniObject::callStaticObjectMethod(
                                   "org/.../TestClass"
                                   ,"staticMethod"
                                   ,"(V)Ljava/lang/String;");

Кажется, все работает, но я не знаю, как я могу использовать str Объект. Я пытался преобразовать его в QString использование объекта str.tostring() метод, но он всегда возвращает пустую строку. Почему это не работает, как ожидалось? Я также проверил ()Ljava/lang/String; для подписи метода, но безуспешно!
Заранее спасибо.

1 ответ

Решение

Вы должны указать возвращаемый тип JNI в <...> при вызове метода:

QAndroidJniObject str =  QAndroidJniObject::callStaticObjectMethod<jstring>(
                               "org/.../TestClass"
                               ,"staticMethod");

QString string = str.toString();

Здесь нет необходимости определять сигнатуру, так как ваша функция не имеет аргумента.

Другие вопросы по тегам