我从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:对'QAndroidJniObject::callStaticObjectMethod( const char 36,const char 13,const char 39,_jstring*)‘的调用没有匹配函数,val.object();
谢谢你的帮助。
我也试过callStaticMethod
为此:
jstring str = QAndroidJniObject::callStaticMethod<jstring>(
"org/.../TestClass"
,"staticMethod"
,"(Ljava/lang/String;)Ljava/lang/String;"
,val.object<jstring>());我得到了以下错误:
QAndroidJniObject::callStaticMethod<_jstring*>(char ...\testclass.cpp:21:...\testclass.cpp:21:未定义的对“_jstring* const*,char const*,char const*,.”的引用
我也尝试过没有模板参数的callStaticObjectMethod。
QAndroidJniObject::callStaticObjectMethod("org/...TextClass“,"staticMethod”,“(Ljava/lang/ QAndroidJniObject;)Ljava/lang/QAndroidJniObject;”,val.object();
它总是返回一个空字符串。我不确定它是否真的很漂亮。我使用qCritical() << str.toString();打印字符串,然后打印一个空的qout!
发布于 2015-02-24 13:02:44
尝试:
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-sourceshttps://stackoverflow.com/questions/28695794
复制相似问题