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
相关产品推荐
相关产品推荐

