我正在尝试使用带有字符串参数的QAndroidJniObject在Qt C ++类中调用Java静态函数。
这是我的Java类,具有我正在调用的函数
public class StatusBar{
public static void setStatusBarBackgroundColor(Activity activity,String colorPref) {
// My code
}
}
我从C ++调用此函数为
void ECApplicationInfo::changeStatusBarColor(QString color)
{
QAndroidJniObject::callStaticMethod<void>(
"com/ezeecube/ezeesync/StatusBar",
"setStatusBarBackgroundColor",
"(Landroid/app/Activity;)V",
activity,color);
}
我收到以下错误
错误:无法传递非平凡可复制类型的类的对象 QString'通过'...' 活性,颜色);
我怎样才能摆脱这个错误
答案 0 :(得分:3)
您的功能签名的定义不正确。您还应指定类型为Ljava/lang/String;
的第二个参数。您还应将QString
转换为jstring
并将其作为参数传递:
QAndroidJniObject::callStaticMethod<void>(
"com/ezeecube/ezeesync/StatusBar",
"setStatusBarBackgroundColor",
"(Landroid/app/Activity;Ljava/lang/String;)V",
activity,QAndroidJniObject::fromString(color).object<jstring>());
答案 1 :(得分:0)
JNI不理解QString
,您需要将其转换为JNI的jstring
类型。 QAndroidJniObject
有一个方便的静态方法:
QString q = "Hello world";
QAndroidJniObject jniObject = QAndroidJniObject::fromString(q);
jstring j = jniObject.object<jstring>();
这是相当典型的,JNI桥通常需要在类型之间手动序列化。
QAndroidJniObject
还提供toString() method,用于将Java字符串转换回QString
。