我从this question编写了以下代码,并且编译完成并完美运行:
QAndroidJniObject str = QAndroidJniObject::callStaticObjectMethod<jstring>(
"org/.../TestClass"
,"staticMethod");
现在我已经更改了java方法,它需要一个string类型的输入参数。
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>()); ^
感谢您的帮助。
为此:
jstring str = QAndroidJniObject::callStaticMethod<jstring>(
"org/.../TestClass"
,"staticMethod"
,"(Ljava/lang/String;)Ljava/lang/String;"
,val.object<jstring>());
我收到以下错误:
... \ testclass.cpp:21:错误:未定义引用'_jstring * QAndroidJniObject :: callStaticMethod&lt; _jstring *&gt;(char const *,char const *,char const *,...)'
##我也试过没有模板参数##
的callStaticObjectMethodQAndroidJniObject str = QAndroidJniObject :: callStaticObjectMethod(“org / ... TextClass”,“staticMethod”,“(Ljava / lang / String;)Ljava / lang / String;”,val.object());
它总是返回一个空字符串。我不确定它是不是真的很好。我使用qCritical() << str.toString();
来打印字符串,然后打印一个空的qout!
答案 0 :(得分:2)
尝试:
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