在Qt中从C ++调用Java方法
calling java method from c++ in qt
我正在尝试使用 QAndroidJniObject 调用 c++ qt 中 android 活动中定义的方法。这是我在C ++课程中的调用
QAndroidJniObject data = QAndroidJniObject::callStaticObjectMethod("com/android/app/appActivity",
"appData",
"(I)Ljava/lang/String;");
QString dataValue = data.toString();
qDebug() <<"Data is " << dataValue;
这个 appData 是在 appActiviy android 类中定义的,它返回一个字符串这是我想要调用并获取返回的字符串值的定义方法
static String appData(){
Log.d("App Data is ", "Working");
return data;
}
但我得到的空是数据值,它也不会抛出任何错误。
您可能需要手动检查异常才能获取 Java 错误。
来自Qt文档:
处理 Java 异常
调用可能引发异常的 Java 函数时,请务必在继续之前检查、处理并清除异常。
注意:当有异常挂起时,进行 JNI 调用是不安全的。
void functionException()
{
QAndroidJniObject myString = QAndroidJniObject::fromString("Hello");
jchar c = myString.callMethod<jchar>("charAt", "(I)C", 1000);
QAndroidJniEnvironment env;
if (env->ExceptionCheck()) {
// Handle exception here.
env->ExceptionClear();
}
}
您确定要呼叫com/android/app/appActivity
而不是com/android/app/Activity
吗?
以下是一些想法:
-
您是否使用 Log.d() 在返回之前打印字符串以确保它不为空?
-
不确定这是否重要,但是您指定了一个整数作为参数,但是Java方法的签名中没有该整数。然后,您应该在 callStaticObjectMethod() 中提供此整数作为参数。
-
正如 Alex P 所提到的,必须处理异常,否则它们会让您头疼,因为它们可能会经常发生并导致整个应用程序崩溃。
-
我在 Android 文档中的 com/android/app/appActivity 找不到任何类。你是说com/android/app/Activity吗?如果是这样,我在这里找不到名为"appData"的方法。
谢谢大家的回答,终于我想通了。这很简单,然后我正在尝试
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")`
表示我定义的 Java 方法的返回类型。我想这是我的愚蠢错误...再次感谢
我今天遇到了同样的问题。虽然它与您的代码不同,但返回值也是 NULL.这是我的代码:
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
- 调用 java 的回调() 时应用程序崩溃.由于 detatchThread 而获得运行时错误
- 尝试在 QT 项目中调用 Java 代码时未找到类异常
- Android:使用 c++ 中的 byte[] 参数调用 java 方法
- 如何在JNI中从线程内部调用JAVA方法
- 无法使用 JNI 从C++模块成功调用 Java 函数
- Android 无法从本机代码调用 Java 方法 JNI
- Android NDK - 引用 JNIEnv 从C++调用 Java
- 我可以通过CPP程序中的数据库调用调用Java程序
- 使用 JNI 从 cpp 调用 java 方法时出现异常
- 如何使JNI RegisterNatives调用Java函数具有C++实例范围
- 在Qt中从C ++调用Java方法
- 使用C 获取Java对象来调用Java方法
- 在QT中调用Java功能
- JNI:从C++调用JAVA方法,返回对象,引用和GC
- 从 Java 调用 c++,然后从相同的 c++ 方法调用 java 方法
- 安卓系统上的Qt蓝牙.通过抽象类上的jni调用java类
- 从Android NDK SIGSEGV调用Java方法
- 从C++调用 java 代码:exception java.lang.NoSuchMethodError
- Android NDK调用java方法表单cpp
- 从Qt C++调用Java函数