从c++;在qt内 我试图用QANDROIDJNIObjor调用C++中的Android活动定义的方法。 这是我在C++类中的调用 QAndroidJniObject data = QAndroidJniObject::callStaticObjectMethod("com/android/app/appActivity", "appData", "(I)Ljava/lang/String;"); QString dataValue = data.toString(); qDebug() <<"Data is " << dataValue;
但我得到的null是dataValue,它不会抛出任何错误 您可能需要手动检查异常以获取Java错误 发件人: 处理Java异常 调用可能引发异常的Java函数时,在继续之前检查、处理并清除异常非常重要 注意:当存在挂起的异常时,进行JNI调用是不安全的从c++;在qt内 我试图用QANDROIDJNIObjor调用C++中的Android活动定义的方法。 这是我在C++类中的调用 QAndroidJniObject data = QAndroidJniObject::callStaticObjectMethod("com/android/app/appActivity", "appData", "(I)Ljava/lang/String;"); QString dataValue = data.toString(); qDebug() <<"Data is " << dataValue;,java,android,c++,qt,java-native-interface,Java,Android,C++,Qt,Java Native Interface,但我得到的null是dataValue,它不会抛出任何错误 您可能需要手动检查异常以获取Java错误 发件人: 处理Java异常 调用可能引发异常的Java函数时,在继续之前检查、处理并清除异常非常重要 注意:当存在挂起的异常时,进行JNI调用是不安全的 void functionException() { QAndroidJniObject myString=QAndroidJniObject::fromString(“你好”); jchar c=myString.callMethod(“
void functionException()
{
QAndroidJniObject myString=QAndroidJniObject::fromString(“你好”);
jchar c=myString.callMethod(“charAt”,“I)c”,1000);
QandroidjnienEnvironment;
如果(环境->例外检查()){
//在这里处理异常。
环境->例外清除();
}
}
您确定要呼叫
com/android/app/appActivity
而不是com/android/app/Activity
?以下是一些想法:
谢谢你们的回答,我终于明白了。这很简单,当时我正在努力
QAndroidJniObject data = QAndroidJniObject::callStaticObjectMethod("com/android/app/appActivity",
"appData",
"(I)Ljava/lang/String;");
在这段代码中,我不知道这个(I)Ljava/lang/String
表示Java方法接受的参数类型,但在我的例子中没有。所以正确的答案是
QAndroidJniObject data = QAndroidJniObject::callStaticObjectMethod<jstring>("com/android/app/appActivity",
"appData")`
QAndroidJniObject data=QAndroidJniObject::callStaticObjectMethod(“com/android/app/appActivity”,
“应用数据”)`
表示我定义的java方法的返回类型。
我想这是我自己犯的愚蠢的错误……再次谢谢你,我今天也有同样的问题。虽然它与您的代码不同,但返回值也是空的。以下是我的代码:
package org.test.project.test;
public class TestJava {
public static String notify(int iNumber )
{
String strNum = iNumber+"";
return strNum;
}
}
然后是C++代码:
QAndroidJniObject str = QAndroidJniObject::callStaticObjectMethod("org/test/project/test/TestJava",
"notify",
"(I)Ljava/lang/String;",
m_iNumber);
//the str always been NULL
dataVale
和dataValue
不匹配。(可能只是一个抄写错误?)它应该给我语法错误…但我检查了它不是我在2中所说的情况。在我的回答中。很高兴你明白了。您还可以使用签名:“()Ljava/lang/String;”
package org.test.project.test;
public class TestJava {
public static String notify(int iNumber )
{
String strNum = iNumber+"";
return strNum;
}
}
QAndroidJniObject str = QAndroidJniObject::callStaticObjectMethod("org/test/project/test/TestJava",
"notify",
"(I)Ljava/lang/String;",
m_iNumber);
//the str always been NULL