【问题标题】:How to pass parameters into Java method using QAndroidJniObject如何使用 QAndroidJniObject 将参数传递给 Java 方法
【发布时间】:2021-12-06 20:07:38
【问题描述】:

在我的 Qt 应用程序中,如果我的 MainActivity 类中有一个用 Java 编写的方法,如下所示,

public Boolean myJavaTestMethod() {
    return true;
}

我知道我可以通过以下方式调用该方法:

QAndroidJniObject method_retval = QtAndroid::androidActivity().callObjectMethod<jboolean>("myJavaTestMethod");

问题:
上面很棒,而且有效。但是,如何将 Qt C++ 端的字符串传递给myJavaTestMethod

假设我想调用下面的方法,该方法将输入参数String 放入其中

public Boolean myJavaTestMethodWithParam(String str) {
    return true;
}

环境:
我用的是Qt 5.15.1商业版。

【问题讨论】:

    标签: java qt qandroidjniobject


    【解决方案1】:

    您必须采取以下步骤:

    1. 使用名称和signature调用您的Java对象的函数:
    QAndroidJniObject result = activity.callObjectMethod("myJavaTestMethodWithParam", "(Ljava/lang/String;)B", myJString);
    

    activityQtAndroid::androidActivity() 返回的内容,myJavaTestMethodWithParam 是你的活动函数,"(Ljava/lang/String;)B" 是它的签名。

    1. 把你的 QString 变成一个 jstring:
    QString helloString("Hello");
    
    QAndroidJniObject string = QAndroidJniObject::fromString(helloString);
    jstring myJString = string.object<jstring>();
    

    要了解signature 部分,请查看:https://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/types.html#wp16432

    更多关于在此处调用 Android/Java 方法的信息:https://doc.qt.io/qt-5/qandroidjniobject.html#callObjectMethod-1

    【讨论】:

    • 您能否添加您如何获得activity 对象的代码?
    • 哦,和你一样,QtAndroid::androidActivity(),我只是为了节省空间而忽略了它。
    • 这不起作用。我认为这个答案是错误的。 activity.myJavaTestMethodWithParam怎么编译?
    • 我刚看到你说的,我修好了,myJavaTestMethodWithParam 显然不会编译,这就是你要调用的方法,它作为callObjectMethod(...) 的第一个参数。解决方案输入错误。
    猜你喜欢
    • 2013-10-04
    • 1970-01-01
    • 2011-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多