1

この質問から次のコードを書きましたが、コンパイルされて完全に機能しました。

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;
    }
}

しかし、メソッドの署名と入力パラメーターを追加してもうまくいきません。JNIを使​​用して、前述のJavaクラス内で静的メソッドを呼び出すために、次のコードを作成しました。

QAndroidJniObject val = QAndroidJniObject::fromString("Test String");
QAndroidJniObject str = QAndroidJniObject::callStaticObjectMethod<jstring>(
          "org/.../TestClass"
          ,"staticMethod"
          ,"(Ljava/lang/String;)Ljava/lang/String;"
          ,val.object<jstring>());

しかし、Qt 作成者はそれをビルドせず、次のエラーを出力します。

...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 が出力されます!

4

1 に答える 1