Qt 不编译 callStaticObjectMethod()
Qt does not compile callStaticObjectMethod()
我从 中编写了以下代码,它被编译并完美运行:
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 class 中调用静态方法
QAndroidJniObject val = QAndroidJniObject::fromString("Test String");
QAndroidJniObject str = QAndroidJniObject::callStaticObjectMethod<jstring>(
"org/.../TestClass"
,"staticMethod"
,"(Ljava/lang/String;)Ljava/lang/String;"
,val.object<jstring>());
但是 Qt creator 没有构建它,打印出这个错误:
...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: error: undefined reference to '_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());
它总是 returns 一个空字符串。我不确定它是否真的是空的。我使用 qCritical() << str.toString();
来打印字符串,但随后打印了一个空的 qout!
尝试:
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
我从
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 class 中调用静态方法QAndroidJniObject val = QAndroidJniObject::fromString("Test String");
QAndroidJniObject str = QAndroidJniObject::callStaticObjectMethod<jstring>(
"org/.../TestClass"
,"staticMethod"
,"(Ljava/lang/String;)Ljava/lang/String;"
,val.object<jstring>());
但是 Qt creator 没有构建它,打印出这个错误:
...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: error: undefined reference to '_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());
它总是 returns 一个空字符串。我不确定它是否真的是空的。我使用 qCritical() << str.toString();
来打印字符串,但随后打印了一个空的 qout!
尝试:
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