[英]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;
}
但我得到 null 是 dataValue 並且它也沒有拋出任何錯誤。
您可能需要手動檢查異常以獲取 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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.