使用字符串参数调用 AndroidJni 静态方法
Calling AndroidJni static method with string parameter
我正在尝试使用带有字符串参数的 QAndroidJniObject 在 Qt C++ class 中调用 Java 静态函数。
这是我的 Java class 具有我正在调用的功能
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);
}
我收到以下错误
error: cannot pass objects of non-trivially-copyable type 'class
QString' through '...'
activity,color);
我怎样才能摆脱这个错误
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
.
您的函数签名定义不正确。您还应该指定类型为 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>());
我正在尝试使用带有字符串参数的 QAndroidJniObject 在 Qt C++ class 中调用 Java 静态函数。
这是我的 Java class 具有我正在调用的功能
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);
}
我收到以下错误
error: cannot pass objects of non-trivially-copyable type 'class QString' through '...' activity,color);
我怎样才能摆脱这个错误
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
.
您的函数签名定义不正确。您还应该指定类型为 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>());