You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Qt使用QAndroidJniObject调用Java方法时如何传递字符串参数

实现方案

前置配置

首先确保你的项目.pro文件已添加Android扩展模块依赖:

QT += androidextras

代码中引入对应头文件:

#include <QtAndroid>
#include <QAndroidJniObject>

具体调用步骤

你需要先将Qt侧的QString转换为Java侧的String类型对象,再传入正确的方法签名调用即可,示例代码如下:

// Qt侧待传入的字符串
QString qtInputStr = "需要传给Java的测试内容";
// 转换为Java String类型对象
QAndroidJniObject javaStr = QAndroidJniObject::fromString(qtInputStr);

// 调用带String参数、返回Boolean包装类的Java方法
QAndroidJniObject retObj = QtAndroid::androidActivity().callObjectMethod(
    "myJavaTestMethodWithParam", // Java方法名
    "(Ljava/lang/String;)Ljava/lang/Boolean;", // Java方法签名
    javaStr.object<jstring>() // 传入的字符串参数
);

// 可选:将Java返回的Boolean包装类转换为C++ bool类型
bool result = retObj.callMethod<jboolean>("booleanValue");

简化场景(Java返回基本类型boolean)

如果你的Java方法返回的是基本类型boolean而非包装类Boolean,可以省去包装类转换步骤:

// Java方法示例
public boolean myJavaTestMethodWithParam(String str) {
    return true;
}

对应C++调用代码:

QString qtInputStr = "测试字符串";
QAndroidJniObject javaStr = QAndroidJniObject::fromString(qtInputStr);
jboolean javaRet = QtAndroid::androidActivity().callMethod<jboolean>(
    "myJavaTestMethodWithParam",
    "(Ljava/lang/String;)Z", // 基本类型boolean返回值的签名
    javaStr.object<jstring>()
);
bool result = javaRet;

注意事项

方法签名必须严格匹配,参数类型、返回值类型只要有一处写错就会触发运行时崩溃:Ljava/lang/String;末尾的分号不能省略,基本类型boolean的签名缩写为Z。

内容的提问来源于stack exchange,提问作者TheWaterProgrammer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 19:06:05