この質問から次のコードを書きましたが、コンパイルされて完全に機能しました。
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 が出力されます!