首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Qt不编译callStaticObjectMethod()

Qt不编译callStaticObjectMethod()
EN

Stack Overflow用户
提问于 2015-02-24 12:27:01
回答 1查看 1.7K关注 0票数 1

我从this question中编写了以下代码,并进行了编译并运行良好:

代码语言:javascript
复制
QAndroidJniObject str =  QAndroidJniObject::callStaticObjectMethod<jstring>(
                               "org/.../TestClass"
                               ,"staticMethod");

现在我已经更改了java方法,它需要一个string类型的输入参数。

Java代码

代码语言:javascript
复制
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类中的静态方法:

代码语言:javascript
复制
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

为此:

代码语言:javascript
复制
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!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-24 13:02:44

尝试:

代码语言:javascript
复制
QAndroidJniObject str = QAndroidJniObject::callStaticObjectMethod(
          "org/.../TestClass"
          ,"staticMethod"
          ,"(Ljava/lang/String;)Ljava/lang/String;"
          ,val.object<jstring>());

我认为这个函数不接受模板参数。

比你能做的还要多:

代码语言:javascript
复制
str.toString() //returns QString

并确保您已经将Java源文件导入到android构建中。例如,如果您的java类位于android-sources文件夹下,请将其添加到.pro文件中:

代码语言:javascript
复制
ANDROID_PACKAGE_SOURCE_DIR = $$PWD/android-sources
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28695794

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档